Migroto APImigroto.com ↗
Access ANZSCO occupation data, visa invitation history, EOI backlog, state nomination programs, and points distribution for Australian skilled migration.
What is the Migroto API?
The Migroto API provides 3 endpoints covering Australian skilled migration occupation data from migroto.com, including ANZSCO codes, visa subclass invitation history, EOI backlog snapshots, state nomination programs, and points distribution trends. The get_occupation_details endpoint returns 8 distinct response objects for a single occupation, while search_occupations lets you resolve an occupation name or partial ANZSCO code into a structured list of matches.
curl -X GET 'https://api.parse.bot/scraper/716090f8-a890-4c9f-ae1e-d9b14b61ee13/search_occupations?query=engineer' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace migroto-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Migroto Occupation Insight SDK — Australian skilled migration data."""
from parse_apis.migroto_com_api import Migroto, VisaSubclass, OccupationNotFound
client = Migroto()
# Search for occupations by name
for occ in client.occupations.search(query="software engineer", limit=5):
print(occ.title, occ.code)
# Get one occupation and drill into its full migration insight
occupation = client.occupations.search(query="civil engineer", limit=1).first()
if occupation:
insight = occupation.insight(inv_subclass=VisaSubclass._189, trend_year_range="2025-2026")
print(insight.occupation.title, insight.occupation.tier)
for prog in insight.state_programs[:3]:
print(prog.state, prog.program_name, prog.status)
# Retrieve available filter options
filters = client.filters.get()
for state in filters.states:
print(state.code, state.name)
# Handle a missing occupation gracefully
try:
bad = client.occupations.get(code="999999")
print(bad.title)
except OccupationNotFound as exc:
print(f"Occupation not found: {exc}")
print("exercised: occupations.search / occupation.insight / filters.get / occupations.get")
Full-text search over Australian skilled migration occupations by name or ANZSCO code. Returns matching occupations with their codes and titles. Results are auto-iterated.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search term — an occupation name (e.g. 'software engineer') or an ANZSCO code (e.g. '261313'). |
{
"type": "object",
"fields": {
"total": "integer",
"occupations": "array of occupation summaries"
},
"sample": {
"data": {
"total": 10,
"occupations": [
{
"id": "019c0534-42c0-7147-a296-7d4436f31cf8",
"code": "261313",
"title": "Software Engineer",
"version": "v1.3, v2022"
}
]
},
"status": "success"
}
}About the Migroto API
Endpoints and What They Return
The API exposes three endpoints. search_occupations accepts a free-text query — either an occupation title like software engineer or a 6-digit ANZSCO code like 261313 — and returns a list of matching occupation summaries including codes and titles, with results auto-paginated. get_occupation_filters requires no inputs and returns the full set of valid filter values: Australian state objects (code and name), visa subclass objects (subclass number and label), financial year range strings, and EOI backlog snapshot dates. Use this endpoint to populate dropdowns or validate parameter values before calling the main details endpoint.
Occupation Details
get_occupation_details is the primary data endpoint. Supply a 6-digit code (obtained from search_occupations) and optionally a UUID via occupation_id for faster lookup. The response includes occupation metadata, invitations (filterable by inv_subclass values 189, 190, or 491 and by inv_year ranges like last-6-months or last-fy), eoi_backlog (filterable by eoi_subclass and a specific eoi_date snapshot in YYYY-MM-DD format), state_programs listing relevant state nomination programs, points_distribution showing a snapshot of point level spread among EOI holders, and eoi_trends with monthly trend data filterable by trend_subclass and trend_year_range. The response also surfaces eoi_backlog_last_update and invitations_last_update ISO date strings so you can assess data freshness.
Filtering and Coverage
All filter parameters in get_occupation_details are optional. Omitting them returns unfiltered data across all subclasses and the default time range. Valid values for date-based and year-based filters can be retrieved dynamically from get_occupation_filters, which keeps your integration aligned with whatever snapshot dates and financial years migroto.com currently holds. Coverage is limited to Australian skilled migration occupations on the ANZSCO framework; the three supported visa subclasses are 189 (points-tested independent), 190 (state-nominated), and 491 (skilled work regional).
The Migroto API is a managed, monitored endpoint for migroto.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when migroto.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official migroto.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build an occupation eligibility checker that maps a job title to ANZSCO code and fetches current EOI backlog depth for subclasses 189, 190, and 491.
- Track invitation cutoff trends over time using the
eoi_trendsmonthly data andinv_yearfilter to compare financial years. - Populate a state nomination comparison table using the
state_programsarray returned for a given ANZSCO code. - Alert users when EOI backlog depth changes by polling
eoi_backlogacross successive snapshot dates fromget_occupation_filters. - Analyze points distribution patterns with
points_distributiondata to advise clients on whether their current points score is competitive. - Integrate occupation search into a migration planning tool that resolves plain-English job titles to ANZSCO codes via
search_occupations.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does migroto.com have an official developer API?+
What does the `eoi_backlog` field in `get_occupation_details` actually contain?+
eoi_backlog field returns an object with a data array of queue position entries and pagination metadata. You can filter it by visa subclass (189, 190, or 491) using the eoi_subclass parameter, and by a specific snapshot date using eoi_date in YYYY-MM-DD format. Available snapshot dates can be retrieved in advance from get_occupation_filters under the eoi_backlog_dates array.Can I retrieve data for occupations outside Australia or under ANZSCO version 2?+
Does the API return individual applicant-level EOI data or employer-sponsored visa data?+
How do I know which `eoi_date` or `trend_year_range` values are valid before calling `get_occupation_details`?+
get_occupation_filters first. It returns eoi_backlog_dates (an array of date objects with value and label) and years (an array of financial year range strings) that enumerate every accepted value for those parameters. Passing a date or year string not in those arrays will not return meaningful data.