# OCC Mexico Jobs Scraper: Empleos México con Filtros y Salario (`getascraper/occ-mexico-jobs-scraper`) Actor

Scrape OCC Mundial (occ.com.mx) empleos in México: filter by 32 states, city, 23 job areas, salary, remote or hybrid and education. Clean salary numbers, real posted dates, optional full details, new-postings monitor. Export JSON, CSV, Excel. Ofertas de empleo, no login.

- **URL**: https://apify.com/getascraper/occ-mexico-jobs-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.71 / 1,000 job postings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🇲🇽 OCC Mexico Jobs Scraper: Empleos México con Filtros y Salario

<table width="100%" style="margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#E9F6F2;border:1px solid #BFE3D9;border-top:4px solid #0E7C66;border-radius:12px 12px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every OCC job in Mexico, filtered the way you hire and with salaries as real numbers</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Choose the state, job area, pay range, remote or hybrid and how recent. Get clean, spreadsheet-ready postings, or only the ones you have not seen before.</span>
</td>
</tr>
</table>
<table width="100%" style="margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE3D9;border-radius:0 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0E7C66">🎯 Every OCC filter</span><br>
<span style="font-size:12px;color:#57534E">State, city, job area, contract, work model, education and posted date.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE3D9;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0E7C66">💰 Salary as numbers</span><br>
<span style="font-size:12px;color:#57534E">Minimum, maximum, period and a monthly equivalent, plus a pay range filter in pesos.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE3D9;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0E7C66">🔁 New postings only</span><br>
<span style="font-size:12px;color:#57534E">Name a search, schedule it, and skip what you already have.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE3D9;border-left:none;border-radius:0 0 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0E7C66">📄 Full details on demand</span><br>
<span style="font-size:12px;color:#57534E">Description, area, education, contract, hours and closing date.</span>
</td>
</tr>
</table>

**Collect OCC Mundial (occ.com.mx, la bolsa de trabajo de México) job postings by keyword, state, city, job area and pay, and download them as JSON, CSV or Excel in minutes.** Each posting comes with the title, employer, location, salary, work model and publication date. Switch on full details to add the complete description, job area, minimum education, contract, working hours and closing date.

***

### 🔍 What can you do with it?

- **I am a recruiter or talent sourcer** building a weekly list of new openings in Monterrey, Guadalajara or Mexico City, so I can reach hiring teams before the posting gets crowded.
- **I am an HR or compensation analyst** comparing posted salaries by state, job area and work model, and tracking how pay moves month to month.
- **I run a job board or career newsletter** and need a steady feed of fresh Mexican postings with clean dates, locations and employer names.
- **I sell to growing companies** and use hiring activity by city and area as a signal of who is expanding right now, including employers that hide their name.

***

<table width="100%"><tr>
<td style="padding:12px 18px;background:#E9F6F2;border-left:4px solid #0E7C66">
<span style="font-size:15px;color:#1C1917">&#9889; <b>No login, no account.</b> Ready for the Apify scheduler: set it once and receive only new postings on every run.</span>
</td>
</tr></table>

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#E9F6F2;border:1px solid #BFE3D9;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0E7C66;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Describe the roles</span><br>
<span style="font-size:12px;color:#57534E">Enter one or more keywords, or paste a search page copied from occ.com.mx.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#E9F6F2;border:1px solid #BFE3D9;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0E7C66;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Narrow it down</span><br>
<span style="font-size:12px;color:#57534E">Choose states, job areas, pay range, work model, education and how recent.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#E9F6F2;border:1px solid #BFE3D9;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0E7C66;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run and download</span><br>
<span style="font-size:12px;color:#57534E">Click Start, then export JSON, CSV or Excel.</span>
</td>
</tr>
</table>

### ⚙️ Input

All fields are optional. With no changes, the Actor returns the 20 newest postings that match the keyword desarrollador.

| Field | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| Job keywords | array of text | No | Job titles, skills or company names, one per row. Each is searched separately and duplicates are removed. Empty means all postings. |
| OCC search page URLs | array of URLs | No | Paste search pages from occ.com.mx. Each is collected with its own filters, and the form filters are not applied to it. |
| States | array of enums | No | One or more of Mexico's 32 states. Empty means all of Mexico. |
| City or municipality | text | No | A city or municipality such as Guadalajara, Monterrey or Benito Juárez. |
| Job areas | array of enums | No | OCC job areas such as Sales, Information technology or Accounting and finance. |
| Contract and hours | array of enums | No | Permanent, full time, part time, temporary, freelance or internship. |
| Work model | array of enums | No | On site, hybrid or remote. |
| Education level | array of enums | No | From secondary school to postgraduate. |
| Employer type | enum | No | Any employer, named employers only, or confidential employers only. |
| Verified employers only | boolean | No | Keep postings from employers with OCC's verified badge. |
| Minimum / maximum monthly salary (MXN) | integer | No | Keep postings whose pay range fits. 0 means no limit. |
| Only postings that show a salary | boolean | No | Drop postings where the employer hides the pay. |
| Posted within | enum | No | Today, 24 hours, 2 or 3 days, a week, 2 weeks, a month or 2 months. |
| Sort results by | enum | No | Newest first or relevance. |
| Maximum postings | integer | No | Total postings to return, 1 to 100,000. Default 20. |
| Add full posting details | boolean | No | Adds the full description and posting facts. Slower. Off by default. |
| Monitor name | text | No | Name a search to return only postings you have not received before. |

***

### 📦 Output

Each row is one job posting. Fields the site does not publish are left out instead of being filled with placeholders.

```json
{
  "id": "21382817",
  "url": "https://www.occ.com.mx/empleo/oferta/21382817-contador-general",
  "title": "Contador general",
  "company": "Vesser",
  "isConfidentialCompany": false,
  "isVerifiedCompany": false,
  "location": "Zapopan, Jalisco",
  "city": "Zapopan",
  "state": "Jalisco",
  "country": "MX",
  "salaryText": "$ 25,000 - $ 28,000 Mensual",
  "salaryDisclosed": true,
  "salaryMin": 25000,
  "salaryMax": 28000,
  "salaryCurrency": "MXN",
  "salaryPeriod": "month",
  "salaryMonthlyMin": 25000,
  "salaryMonthlyMax": 28000,
  "postedText": "Hace 2 días",
  "postedDate": "2026-10-21",
  "postedDatePrecision": "day",
  "badges": ["Recomendada", "Postúlate primero"],
  "isUrgent": false,
  "isSponsored": false,
  "isFeatured": true,
  "workModel": "hybrid",
  "category": "Contabilidad - Finanzas",
  "subcategory": "Contabilidad",
  "minEducation": "Universitario titulado",
  "contractType": "Tiempo completo",
  "schedule": "Jornada completa",
  "validThrough": "2026-12-20",
  "description": "Contador(a) Fiscal y de Nómina – Zapopan (Jardines Universidad)...",
  "detailFetched": true,
  "searchKeyword": "contador",
  "scrapedAt": "2026-10-23T20:02:40.128Z"
}
```

#### Field reference

| Field | Type | Description |
| :--- | :--- | :--- |
| `id` | string | OCC posting number. |
| `url` | string | Link to the posting, where candidates apply. |
| `title` | string | Job title as published. |
| `company` | string | Employer name. Left out when the employer is confidential. |
| `isConfidentialCompany`, `isVerifiedCompany` | boolean | Employer name hidden by OCC, and OCC's verified-employer badge. |
| `logoUrl` | string | Employer logo, when the posting shows one. |
| `location`, `city`, `state`, `country` | string | Where the job is based. Country is always MX. |
| `salaryText` | string | Salary line exactly as OCC shows it. |
| `salaryDisclosed` | boolean | Whether the employer shows a salary. |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | number, string | Salary as numbers, in pesos, with the pay period. |
| `salaryMonthlyMin`, `salaryMonthlyMax` | number | Salary converted to a monthly amount, for easy comparison. |
| `postedText`, `postedDate`, `postedDatePrecision` | string | OCC's relative age, the publication date, and whether it is exact (day) or approximate. |
| `benefits` | array | Benefits shown on the posting card. |
| `badges`, `isUrgent`, `isSponsored`, `isFeatured` | array, boolean | Labels such as urgent hiring, promoted and featured postings. |
| `workModel` | string | on-site, hybrid or remote. Set when the work model filter or the details make it known. |
| `category`, `subcategory` | string | Only with full details: OCC job area and subarea. |
| `minEducation`, `contractType`, `schedule` | string | Only with full details: minimum education, contract and working hours. |
| `validThrough` | string | Only with full details: closing date. |
| `description`, `descriptionHtml` | string | Only with full details: full posting text and cleaned HTML. |
| `detailFetched` | boolean | Only with full details on: whether the detail data was added. |
| `searchKeyword` | string | The keyword that found the posting. |
| `scrapedAt` | string | When the row was collected. |

***

### 💰 Pricing

Pricing is pay per event. You pay for each posting saved to your dataset. If you switch on full details, each posting whose details were actually retrieved is charged a second, separate Job details event. Postings where details could not be retrieved are not charged for it, and runs with no results cost nothing. Both events follow your Apify plan, so higher plans pay less per event, and the maximum charge you set for a run is always respected. There are no monthly subscriptions or hidden fees. Free-plan runs are limited to 25 postings per run, 3 runs per day, and a short wait between runs. Paid plans have no such limits.

***

### ⭐ Enjoying OCC Mexico Jobs Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#E9F6F2;border:1px solid #E9F6F2;border-left:5px solid #0E7C66;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this saves you hours of searching OCC by hand, tell us about it.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other recruiters and analysts working with Mexican hiring data find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0E7C66;border:1px solid #E9F6F2;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/occ-mexico-jobs-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

***

### ✨ Tips and best practices

- **Build a daily hiring feed.** Pick a Monitor name, set Posted within to 24 hours or 2 days, and schedule the Actor. Every run returns only postings you have not received before.
- **Compare pay across places.** Pick several states, turn on Only postings that show a salary, and sort on the monthly salary fields in your spreadsheet.
- **Separate direct employers from hidden ones.** Employer type lets you keep only named companies, or study the confidential postings on their own.
- **Add details only when you need them.** The default run is quick. Turn on full details when you need descriptions, job areas or closing dates.
- **Copy a search from occ.com.mx.** Set up the filters on the site, paste the page address into the search URLs, and get exactly that list.
- **Read the publication date with its precision.** Recent postings have an exact date. Older ones show a week or month ago on the site, so their date is marked approximate until you add full details.

***

### ❓ FAQ

##### ¿Cómo exporto las vacantes de OCC a Excel?

Run the Actor with your keyword and filters, open the Output tab, and export the dataset as Excel or CSV. Spanish accents are kept as published.

##### Does it need an OCC account?

No. It collects publicly visible postings and needs no login or account.

##### Does it return salaries?

Yes, whenever the employer shows one. Roughly seven in ten postings do. Those come back as numbers with the pay period. When the employer hides the pay, the salary fields are left out instead of guessed.

##### Does it return recruiter or candidate contact details?

No. It returns public posting and employer information only: no resumes, candidate data or private contact details.

##### ¿Cómo encuentro empleos remotos en Guadalajara o Ciudad de México?

Select Jalisco or Ciudad de México under States and Remote under Work model. Add Posted within to see only the newest remote roles.

***

### 🛡️ Disclaimers and support

- **Disclaimer:** This Actor retrieves publicly available job postings. It is an independent tool and is not affiliated with or endorsed by OCC Mundial. Make sure your use complies with the site's terms and applicable laws.
- **Support:** Open an issue from the Actor page in the Apify Console for bug reports or feature requests.

### 🔗 Other actors

- [Kariyer.net Jobs Scraper: İş İlanları Türkiye with Filters](https://apify.com/getascraper/kariyer-net-jobs-scraper) ↗ - Turkey job postings with city, sector and remote filters.
- [AllJobs.co.il Scraper: משרות ודרושים API](https://apify.com/getascraper/alljobs-scraper) ↗ - Israel job listings with clean Hebrew data.
- [Net-Empregos Portugal Jobs Scraper: Vagas de Emprego, No Login](https://apify.com/getascraper/net-empregos-jobs-scraper) ↗ - Portuguese job listings by district, category or keyword.
- [MyCareersFuture Singapore Scraper: Jobs, Salaries, Skills & UEN](https://apify.com/getascraper/mycareersfuture-jobs-scraper) ↗ - Singapore jobs with salary ranges and skills.
- [IIMJobs Scraper: MBA, Finance & CA Jobs India with Recruiters](https://apify.com/getascraper/iimjobs-scraper) ↗ - MBA, finance and consulting roles across India.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/occ-mexico-jobs-scraper/changelog.md

# Actor input Schema

## `keywords` (type: `array`):

Job titles, skills or company names to search for, one per row (for example: desarrollador, contador, ventas). Each keyword is searched separately and duplicates are removed. Leave empty to browse all postings using the filters below. Accents are optional.

## `startUrls` (type: `array`):

Optional. Paste search pages copied from occ.com.mx (for example https://www.occ.com.mx/empleos/de-contador/en-jalisco/). Each page is collected with its own filters, and the filter fields in this form are not applied to pasted pages. Leave empty to search with the form.

## `states` (type: `array`):

Only postings in these states. Pick several to search each one. Leave empty for all of Mexico.

## `city` (type: `string`):

Optional city or municipality name such as Guadalajara, Monterrey or Benito Juarez. Combined with the state when exactly one state is selected. If OCC does not know the name, no postings are returned.

## `categories` (type: `array`):

Only postings in these OCC job areas, such as Sales or Information technology. Pick several to search each one. Leave empty for all areas.

## `contractTypes` (type: `array`):

Only postings with these contract or working-hours types. Pick several to search each one. Leave empty for all types.

## `workModels` (type: `array`):

Only on-site, hybrid or remote postings. Pick several to search each one. Leave empty for all. Rows found with a single work model are labeled with it.

## `educationLevels` (type: `array`):

Only postings that ask for this education level. Pick several to search each one. Leave empty for all levels.

## `employerType` (type: `string`):

Choose whether to keep only postings from named employers or only from confidential employers (the company name is hidden by OCC). Useful to separate direct employers from recruiters hiding behind a confidential listing.

## `verifiedEmployersOnly` (type: `boolean`):

Keep only postings from employers carrying OCC's verified-company badge.

## `minSalary` (type: `integer`):

Only postings whose salary range reaches at least this monthly amount in pesos. OCC also keeps postings that hide the salary, so turn on the salary-only option to drop those. 0 means no minimum.

## `maxSalary` (type: `integer`):

Only postings whose salary range starts at or below this monthly amount in pesos. 0 means no maximum.

## `onlyWithSalary` (type: `boolean`):

Drop postings where the employer hides the salary. Every row you keep then has numeric salary fields.

## `postedWithin` (type: `string`):

Only postings published within this period. OCC keeps postings for about two months.

## `sortBy` (type: `string`):

Newest first returns the most recent postings first, which is best when you limit the number of results. Relevance follows OCC's own ranking. Monitoring always uses newest first.

## `maxResults` (type: `integer`):

How many postings to return in total. Raise it to collect more; large values take longer.

## `includeDetails` (type: `boolean`):

Open every posting to add the full description, job area and subarea, minimum education, contract, working hours, work model, exact publication date and closing date. Slower and billed per posting with details.

## `monitorScope` (type: `string`):

Give this search a name (for example cdmx-sales-remote) to turn on monitoring. The Actor remembers which postings it already delivered under that name and returns only postings it has not shown you before, newest first, so scheduled runs give you just what is new. For a daily schedule also set Posted within to the last 24 hours or 2 days. Use a different name for each saved search. Leave empty to return everything every time.

## Actor input object example

```json
{
  "keywords": [
    "desarrollador"
  ],
  "startUrls": [],
  "states": [],
  "city": "",
  "categories": [],
  "contractTypes": [],
  "workModels": [],
  "educationLevels": [],
  "employerType": "any",
  "verifiedEmployersOnly": false,
  "minSalary": 0,
  "maxSalary": 0,
  "onlyWithSalary": false,
  "postedWithin": "any",
  "sortBy": "date",
  "maxResults": 20,
  "includeDetails": false,
  "monitorScope": ""
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "desarrollador"
    ],
    "startUrls": [],
    "states": [],
    "city": "",
    "categories": [],
    "contractTypes": [],
    "workModels": [],
    "educationLevels": [],
    "employerType": "any",
    "verifiedEmployersOnly": false,
    "minSalary": 0,
    "maxSalary": 0,
    "onlyWithSalary": false,
    "postedWithin": "any",
    "sortBy": "date",
    "maxResults": 20,
    "includeDetails": false,
    "monitorScope": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/occ-mexico-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["desarrollador"],
    "startUrls": [],
    "states": [],
    "city": "",
    "categories": [],
    "contractTypes": [],
    "workModels": [],
    "educationLevels": [],
    "employerType": "any",
    "verifiedEmployersOnly": False,
    "minSalary": 0,
    "maxSalary": 0,
    "onlyWithSalary": False,
    "postedWithin": "any",
    "sortBy": "date",
    "maxResults": 20,
    "includeDetails": False,
    "monitorScope": "",
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/occ-mexico-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "desarrollador"
  ],
  "startUrls": [],
  "states": [],
  "city": "",
  "categories": [],
  "contractTypes": [],
  "workModels": [],
  "educationLevels": [],
  "employerType": "any",
  "verifiedEmployersOnly": false,
  "minSalary": 0,
  "maxSalary": 0,
  "onlyWithSalary": false,
  "postedWithin": "any",
  "sortBy": "date",
  "maxResults": 20,
  "includeDetails": false,
  "monitorScope": ""
}' |
apify call getascraper/occ-mexico-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/occ-mexico-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/igBTxzqgj2DQqMzog/builds/QQpkZAWnxEVaoRa8F/openapi.json
