top of page

How to scrape restaurant data from AGFG using the Minexa API

Restaurant data is genuinely useful for a wide range of applications: hospitality intelligence platforms, travel recommendation engines, food media products, and market research tools all depend on structured, reliable listings. AGFG (agfg.com.au) is one of Australia's most established dining guides, covering awarded restaurants across every state with chef hat ratings, cuisine classifications, and regional breakdowns. The challenge is that none of this data is available via a public API.

This guide walks through how to extract structured restaurant and awards data from AGFG using the Minexa API, a two-phase workflow where you train a scraper once using the Minexa Chrome extension and then call the API programmatically to extract data at scale.

The core problem: rich data, no structured access

AGFG publishes detailed restaurant profiles including award tiers, cuisine types, suburb locations, regional groupings, and hero images. For a developer building a dining discovery product or a hospitality analyst tracking award trends across Australian regions, this is exactly the kind of structured data that would normally require either manual collection or a bespoke scraper that needs ongoing maintenance.

The Minexa API solves this differently. You train a scraper once by walking through the page in the Chrome extension, and that configuration becomes a reusable asset you call via API on any subsequent run. The scraper ID is stable, the output schema is consistent, and you do not need to touch selectors or maintain parsing logic.

Phase one: training the scraper in the extension

Open the Minexa Chrome extension on the AGFG Melbourne restaurants page at agfg.com.au/restaurants/melbourne. The extension loads and presents a confirmation prompt.

Click 'I'm on the right page' to confirm the starting URL. The extension then analyses the page and reports what pagination mechanism it detected. For AGFG, it identifies the next page control and whether the listing requires multi-page traversal.

After confirming pagination, the extension asks whether you want to scrape only the list page or also follow each restaurant link to extract detail page data. For most use cases with AGFG, the list page already contains the award tier, cuisine type, location, region, state, and image fields you need. Select the option that matches your data requirements.

Next, choose between simple and advanced scraping mode. Simple mode is sufficient for the AGFG listing structure since the data loads without requiring custom interaction sequences.

The extension then highlights the repeating container holding the restaurant listings automatically. You confirm the selection and click 'Create scraper'. Within seconds, the extension surfaces all detected data points across the listing rows.

The data preview shows all extracted columns with navigation controls to scroll through the detected fields. This is where you verify that the fields you need are present before finalising the scraper configuration.

Getting the scraper ID and API request

Click 'API request' in the extension interface. This generates a ready-to-use JSON request body and a Python code sample you can copy directly into your pipeline. The scraper ID shown here is the stable identifier you will use in every subsequent API call.

The job summary screen also shows options for Google Sheets integration and scheduled runs if you are using the extension workflow rather than the API directly.

Calling the Minexa API

Once the scraper is trained, every subsequent extraction is a single POST request to the Minexa API endpoint. Here is a minimal Python example:

import requests

url = "https://api.minexa.ai/data"
headers = {
    "Content-Type": "application/json",
    "x-api-key": "YOUR_API_KEY"
}
payload = {
    "scraper_id": 6231,
    "urls": ["https://www.agfg.com.au/awards"],
    "columns": "top_40"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())

The scraper_id is the identifier generated during training. The urls array accepts any page on AGFG that shares the same listing structure. The columns parameter controls how many fields are returned per row. You can pass top_40 to get the highest-ranked fields automatically, or pass a named list of specific columns if you only need a subset.

If you need to run extractions on a recurring basis across many different URLs, set up a cron job on your own infrastructure and pass the target URLs in each API call. The API handles each request independently, so you control the schedule and URL rotation from your side.

What the data looks like

Below are two representative rows from an AGFG extraction, with internal metadata fields removed and column name prefixes cleaned up for readability:

[
  {
    "restaurant_name": "Sixpenny",
    "chef_hat_award": "19 Chef Hat Award",
    "cuisine_type": "Modern Australian",
    "location": "Stanmore",
    "region": "Sydney",
    "state": "NSW",
    "restaurant_link": "https://www.agfg.com.au/restaurant/sixpenny-31322",
    "award_image_url": "https://media1.agfg.com.au/images/icons/awards/19.png",
    "image_source": "https://media1.agfg.com.au/images/listing/31322/hero-400.jpg"
  },
  {
    "restaurant_name": "Amaru",
    "chef_hat_award": "19 Chef Hat Award",
    "cuisine_type": "Modern Australian",
    "location": "Armadale",
    "region": "Melbourne",
    "state": "VIC",
    "restaurant_link": "https://www.agfg.com.au/restaurant/amaru-54835",
    "award_image_url": "https://media1.agfg.com.au/images/icons/awards/19.png",
    "image_source": "https://media1.agfg.com.au/images/listing/54835/hero-400.jpg"
  }
]

A few fields worth noting for downstream use. The chef_hat_award field returns the full award label as a readable string, so filtering by tier is a straightforward string comparison with no numeric parsing required. The restaurant_link field is an absolute URL, which means you can deep-link directly to any individual restaurant page without constructing paths manually. The award_image_url field points to a stable CDN-hosted icon per award tier, useful if you are rendering badge visuals in a front-end interface. The image_url field in the raw output returns a structured array of objects that encodes the image source, HTML tag, attribute name, and extraction type together, giving you everything needed to resolve the correct asset across different rendering contexts without additional lookups.

Running the job and exporting results

After the scraping job runs, results appear in a structured table. You can export to Excel or JSON directly from the interface, or consume the API response programmatically in your pipeline.

The output schema stays consistent across runs because the scraper is bound to the page structure rather than interpreting content. If a restaurant has no hero image on a given listing, that field returns empty rather than carrying over a value from an adjacent row.

To get started with the Minexa API and set up your first AGFG scraper, visit the developer getting started guide. Full API documentation is available at minexa.ai/redirect?r=api_docs.

For a related walkthrough covering a similar hospitality data extraction use case, see Scraping hotel listings for OTA builders: a practical guide with Minexa API.

Recent Posts

See All

Comments


Heading 2

bottom of page