How to scrape tax and accounting session data from Xero Central using the Minexa API
- Minexa.ai

- 13 hours ago
- 4 min read
Xero Central publishes a live schedule of accounting and tax training sessions at learning.central.xero.com/student/all_sessions. The page lists upcoming workshops, webinars, and certification events across regions including EMEA, ANZ, US, and CA. Each row carries a session title, scheduled time, instructor name, enrollment link, and session identifiers embedded in the page structure.
This guide covers how to extract that data programmatically using the Minexa API. The workflow has two phases: train a scraper once using the Minexa Chrome extension, then call the API to pull structured session data at scale.
Watch the full walkthrough first
The video below covers the complete extraction workflow from the Xero Central sessions page, including scraper training, field review, and API configuration.
Phase 1: Training the scraper
Open the Minexa Chrome extension on the Xero Central all-sessions page. The extension identifies the page as a structured list and prompts you to confirm you are on the correct starting URL.
After confirming the starting page, the extension detects pagination on the sessions list and presents a Continue button to validate the pagination logic before proceeding.
You are then asked whether to scrape the session list only, or to follow each session link and extract detail page content as well. For most pipeline use cases, list-only extraction covers all the fields needed.
Select simple scraping to proceed. The extension highlights the full session container automatically without requiring manual field selection.
After the container is confirmed, all extracted data points become visible with navigation controls to review each field across rows.
Phase 2: The API request
Once the scraper is trained, the extension generates a ready-to-run code sample. The scraper ID is the stable identifier you pass in every API call. Below is the request structure using Python:
import requests
response = requests.post(
'https://api.minexa.ai/data',
headers={'x-api-key': 'YOUR_API_KEY'},
json={
'scraper_id': 6312,
'urls': ['https://learning.central.xero.com/student/all_sessions'],
'columns': 'top_20'
}
)
print(response.json())
The columns parameter accepts either a top_N value to return the highest-ranked fields, or a named list of specific fields. For Xero Central sessions, top_20 captures all meaningful data points per row.
Read the full API reference for parameter details and authentication setup.
Field reference: what each column contains
workshop_description returns the full session title per row, such as 'Streamline your provisional tax workflow with Xero - ZA' or 'MTD for Income Tax: Prepare your business for change - UK'. This is the primary label for grouping or filtering sessions by topic or region.
event_schedule surfaces the full date and time string per session including the day name, date, start time, end time, and timezone. Example: 'Tuesday, Jul 21, 2026 at 9:00 AM to 10:00 AM BST'. This field is ready to parse into datetime objects for calendar integration or scheduling logic.
instructor_name returns the instructor label per session as a prefixed string such as 'Instructor: Pranisha Sewraj'. Stripping the prefix gives a clean name value for aggregation or instructor-level filtering across sessions.
session_id surfaces a stable DOM-level identifier per row in the format 'session-NNNN'. This value is consistent across repeated API runs and can be used as a deduplication key without relying on title matching.
dialog_url encodes a full authentication-aware modal path per session. The path embeds both the destination course page slug and the course session ID as query parameters. This means enrollment deep-links can be constructed programmatically per row without any secondary page visit.
event_details_url returns a JSON-encoded string per row containing two keys: the session event ID and the modal anchor ID. Parsing this field gives you the exact values needed to trigger the session detail modal in a downstream interface without additional navigation.
date returns the numeric day of the month per session as a plain string. Combined with the timezone context in event_schedule, this field supports lightweight date-range filtering at the pipeline level.
Sample extracted data
Below are two rows from the extracted output to illustrate the field structure:
[
{
"workshop_description": "Syft Fundamentals Training",
"event_schedule": "Monday, Jul 20, 2026 at 3:00 PM to 5:00 PM BST",
"instructor_name": "Instructor: Shannon McTiernan",
"session_id": "session-2273",
"action": "Enroll",
"date": "20"
},
{
"workshop_description": "Annual financial reporting made easy with Xero templates - EMEA",
"event_schedule": "Tuesday, Jul 21, 2026 at 1:00 PM to 2:00 PM BST",
"instructor_name": "Instructor: Pranisha Sewraj",
"session_id": "session-2250",
"action": "Enroll",
"date": "21"
}
]
Exporting and running the job
After completing configuration, the scraping job appears in your job list and can be triggered immediately via the Run button or called directly through the API.
Once the job completes, results are available for export to Excel or JSON directly from the results view.
For recurring extraction, set up a cron job on your own infrastructure and pass the Xero Central sessions URL to the API on whatever interval your pipeline requires. The scraper ID stays constant, so no retraining is needed between runs.
To get started with the Minexa API, visit the developer getting started guide.
For a related extraction guide covering another tax and accounting data source, see: Scraping tax and accounting data from IDX using the Minexa API.

Comments