OCC APIocc.com.mx ↗
Search OCC.com.mx job listings by keyword and location. Get paginated results with salaries, companies, and full job details including skills and benefits.
What is the OCC API?
The OCC.com.mx API gives developers access to Mexico's largest job board through 2 endpoints. Use search_jobs to query listings by keyword and location, receiving paginated results with titles, salaries, companies, and posting dates. Use get_job_details to retrieve full listing data — including salary range, required skills, benefits, city, state, and job category — for any offer ID returned by a search.
curl -X GET 'https://api.parse.bot/scraper/bb43db95-21fc-4220-8ad2-36cabe249211/search_jobs?page=1&limit=22&keyword=desarrollador&location=ciudad-de-mexico' \ -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 occ-com-mx-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: OCC México Job Search — search jobs and drill into details."""
from parse_apis.occ_méxico_job_search_api import OCC, JobNotFound
client = OCC()
# Search for developer jobs in Mexico City, capped at 5 results.
for job in client.jobsummaries.search(keyword="desarrollador", location="ciudad-de-mexico", limit=5):
print(job.title, job.company, job.salary)
# Drill into the first result's full details.
first = client.jobsummaries.search(keyword="ingeniero", limit=1).first()
if first:
detail = first.details()
print(detail.title, detail.employment_type, detail.schedule)
print(detail.salary.text, detail.salary.min, detail.salary.max)
print(detail.category, detail.subcategory, detail.is_remote)
# Fetch a job directly by offer_id with typed error handling.
try:
job = client.jobs.get(offer_id="21185314")
print(job.title, job.company, job.location)
print(job.posted_date, job.posted_date_relative)
except JobNotFound as exc:
print(f"Job not found: {exc.offer_id}")
print("exercised: jobsummaries.search / JobSummary.details / jobs.get / JobNotFound")
Search for job listings by keyword and optionally filter by location. Returns a paginated list of jobs with basic information including title, company, salary, location, and posted date. Each page contains up to 22 results. Paginates via integer page counter.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| limit | integer | Maximum number of results to return per page (max 22) |
| keywordrequired | string | Job search keyword (e.g., 'desarrollador', 'contador', 'ingeniero') |
| location | string | Location filter as URL slug (e.g., 'ciudad-de-mexico', 'monterrey', 'guadalajara'). Leave empty for all locations. |
{
"type": "object",
"fields": {
"jobs": "array of job objects with offer_id, title, salary, company, location, posted_date",
"page": "integer - current page number",
"total_pages": "integer - total pages available",
"total_results": "integer - total matching jobs",
"results_on_page": "integer - number of results on this page"
},
"sample": {
"data": {
"jobs": [
{
"title": "Desarrollador Sr. Odoo",
"salary": "$ 28,000 Mensual",
"company": "DISTRIBUIDORA DE BICICLETAS BENOTTO S.A. DE C.V.",
"location": "Ciudad de México",
"offer_id": "21185314",
"posted_date": "Ayer"
}
],
"page": 1,
"total_pages": 35,
"total_results": 749,
"results_on_page": 22
},
"status": "success"
}
}About the OCC API
Search Jobs
The search_jobs endpoint accepts a required keyword parameter (e.g., desarrollador, contador, ingeniero) and an optional location slug (e.g., ciudad-de-mexico, monterrey, guadalajara). Results are paginated at up to 22 listings per page. The response includes total_results, total_pages, and results_on_page for building pagination controls, plus a jobs array with per-listing fields: offer_id, title, salary, company, location, and posted_date. Omitting location returns results across all of Mexico.
Job Details
The get_job_details endpoint takes an offer_id from any search_jobs result and returns a detailed record. The salary object exposes min, max (both integers or null), and a human-readable text representation. Additional fields include skills (array of required skill strings), benefits (array of offered benefit strings), category, city, state, location, and the canonical url for the listing on OCC.com.mx.
Coverage and Scope
All listings are sourced from occ.com.mx, which focuses on the Mexican labor market. Location filtering uses URL slugs matching OCC's regional taxonomy, so values like guadalajara or monterrey should match the site's conventions. Salary fields may be null when a listing does not publish compensation data.
The OCC API is a managed, monitored endpoint for occ.com.mx — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when occ.com.mx 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 occ.com.mx 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?+
- Aggregate Mexican job market data by keyword to analyze demand for specific roles such as
ingeniero de softwareorcontador - Build a salary intelligence tool by collecting
salary.minandsalary.maxfields across categories and locations - Power a job alert service that polls
search_jobsfor newposted_datevalues matching user-defined keywords - Populate a curated job board focused on Mexico, pulling full descriptions and
benefitsfromget_job_details - Analyze skill requirements across industries by extracting
skillsarrays from multiple job detail responses - Track hiring activity by city or state using the
locationfilter andtotal_resultscounts over time - Build a recruiting pipeline tool that matches candidate profiles against required
skillsandbenefitsfields
| 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 OCC.com.mx have an official developer API?+
What does `search_jobs` return and how do I filter by location?+
jobs array with up to 22 entries per page, each containing offer_id, title, salary, company, location, and posted_date, plus pagination metadata (total_results, total_pages, results_on_page). Pass a location slug such as ciudad-de-mexico or monterrey to the location parameter to filter geographically. Omitting it returns results nationwide.What happens when a listing doesn't include salary information?+
salary object returned by get_job_details includes min and max as integers or null. When a company does not publish compensation, both fields will be null and the text field will reflect whatever placeholder or omission the original listing shows.Does the API support searching by company name or filtering by job category?+
search_jobs endpoint filters by keyword and location only. Category is returned as a field in get_job_details results but is not an input filter. You can fork this API on Parse and revise it to add category or company-name filtering as additional parameters.