{
  "openapi": "3.0.1",
  "info": {
    "title": "APEC Jobs Scraper (apec.fr)",
    "description": "Scrape apec.fr, France's executive & manager job board, by keywords, place and filters or from search URLs: title, company, place, salary, contract, full advert text, skills, apply link.",
    "version": "0.0",
    "x-build-id": "5d8Lut5Y2bd1kLbnC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~apec-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-apec-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/nice_dev~apec-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-apec-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/nice_dev~apec-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-apec-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 1000,
            "type": "array",
            "description": "apec.fr search URLs (`https://www.apec.fr/candidat/recherche-emploi.html/emploi?motsCles=data&lieux=75`, pagination is automatic) or single offer URLs (`https://www.apec.fr/candidat/recherche-emploi.html/emploi/detail-offre/179239722W`). Max 1 000 URLs. The site's filters in the URL are kept: keywords, places, contract type and duration, experience, education level, internship length, start date, job function, sector, employer type, position status, remote work, business travel, geolocated only, salary (bounds or band), publication date, sort, and a `distance` around ONE city (like the site, the radius is ignored with several places). When not empty, **Keywords**, **Locations** and the radius fields are ignored; the other filters below fill what a URL does not set.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchQueries": {
            "title": "Keywords",
            "maxItems": 100,
            "type": "array",
            "description": "Free-text searches, one search per entry (`data engineer`, `chef de projet`, `comptable`), times each location below (max 500 searches per run). Offers found by several searches are saved once. Leave empty to crawl the whole board (≈ 100 000 live offers, newest first).",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "maxItems": 100,
            "type": "array",
            "description": "Places, resolved against APEC's own list: a department number or name (`75`, `Rhône`), a region (`Ile-de-France`, `Bretagne`), a city (`Lyon`, `Toulouse`, `Paris 15`), `France`, or a country (`Allemagne`). One search per place, so that **Max offers per search** applies to each. Empty = everywhere (France + international).",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max offers",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of offers to save (after deduplication across searches). 0 = no limit. For reference: `data` ≈ 8 000 offers, `commercial` ≈ 28 000, whole board ≈ 100 000.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max offers per search",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Cap for EACH search (keyword × location, × employer type when tagged, or search URL), so that the first search cannot use up the whole **Max offers** budget. 0 = no per-search cap.",
            "default": 0
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "Empty = all contract types.",
            "items": {
              "type": "string",
              "enum": [
                "CDI",
                "CDD",
                "INTERIM",
                "INTERIM_MISSION",
                "CDI_INTERIM",
                "ALTERNANCE",
                "CDD_APPRENTISSAGE",
                "CDD_PROFESSIONNALISATION",
                "CDI_APPRENTISSAGE",
                "CDI_PROFESSIONNALISATION",
                "STAGE"
              ],
              "enumTitles": [
                "CDI (permanent)",
                "CDD (fixed-term)",
                "Intérim (temp)",
                "Mission d'intérim",
                "CDI intérimaire",
                "Alternance (work-study)",
                "CDD - contrat d'apprentissage",
                "CDD - contrat de professionnalisation",
                "CDI - contrat d'apprentissage",
                "CDI - contrat de professionnalisation",
                "Stage (internship)"
              ]
            },
            "default": []
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "ANY",
              "1",
              "7",
              "30"
            ],
            "type": "string",
            "description": "Only offers published (or re-published) in the last N days. `1` + a daily schedule = monitoring of new offers.",
            "default": "ANY"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "DATE",
              "RELEVANCE",
              "ID"
            ],
            "type": "string",
            "description": "Order of results. New offers are inserted at the top of a date-sorted crawl while it runs (duplicates are removed); `ID` is steadier for crawls of thousands of offers.",
            "default": "DATE"
          },
          "includeDetails": {
            "title": "Include details",
            "type": "boolean",
            "description": "Open each offer (1 extra request per offer) for the full advert text (description, candidate profile, company presentation), skills, apply link, experience level, job function, first publication date and number of positions. Off = search-result fields only (the description is then a 283-character snippet): one request per 100 offers instead of one per offer, so 1 000 offers take seconds instead of minutes.",
            "default": true
          },
          "experienceLevels": {
            "title": "Experience levels",
            "type": "array",
            "description": "Experience required by the offer.",
            "items": {
              "type": "string",
              "enum": [
                "JUNIOR",
                "3_5",
                "6_9",
                "10_PLUS"
              ],
              "enumTitles": [
                "Débutant (junior)",
                "3 - 5 ans",
                "6 - 9 ans",
                "10 ans et +"
              ]
            },
            "default": []
          },
          "remoteWork": {
            "title": "Remote work",
            "type": "array",
            "description": "Remote-work policy stated in the offer.",
            "items": {
              "type": "string",
              "enum": [
                "OCCASIONAL",
                "PARTIAL",
                "FULL",
                "NONE"
              ],
              "enumTitles": [
                "Ponctuel autorisé (occasional)",
                "Partiel possible (hybrid)",
                "Total possible (full remote)",
                "Non autorisé (on-site)"
              ]
            },
            "default": []
          },
          "employerTypes": {
            "title": "Employer types",
            "type": "array",
            "description": "Who posts the offer. `Partenaire` offers come from other job boards: the company name is then the board's (e.g. cadremploi), not the employer's.",
            "items": {
              "type": "string",
              "enum": [
                "COMPANY",
                "RECRUITMENT_AGENCY",
                "STAFFING_AGENCY",
                "IT_SERVICES",
                "PARTNER_FEED"
              ],
              "enumTitles": [
                "Entreprise (direct employer)",
                "Cabinet de recrutement",
                "Agence d'emploi (staffing)",
                "SSII / ESN (IT services)",
                "Partenaire (job-board feeds resold on APEC, ≈ 40 % of the board)"
              ]
            },
            "default": []
          },
          "tagEmployerType": {
            "title": "Tag each offer with its employer type",
            "type": "boolean",
            "description": "Fills `employerType` on every offer (Entreprise, Cabinet de recrutement, Agence d'emploi, SSII / ESN, Partenaire). apec.fr gives no such field per offer, so each search is run once per employer type (the 5 types split the board exactly): a few more search pages, and **Max offers per search** applies to each type. Off: `employerType` is filled only when **Employer types** holds a single type.",
            "default": false
          },
          "sectors": {
            "title": "Sectors",
            "type": "array",
            "description": "Industry sector of the employer (APEC's 29 sectors).",
            "items": {
              "type": "string",
              "enum": [
                "101752",
                "101753",
                "101754",
                "101755",
                "101756",
                "101757",
                "101758",
                "101759",
                "101760",
                "101761",
                "101762",
                "101763",
                "101764",
                "101765",
                "101766",
                "101767",
                "101768",
                "101769",
                "101770",
                "101771",
                "101772",
                "101773",
                "101774",
                "101775",
                "101776",
                "101777",
                "101778",
                "101779",
                "101780"
              ],
              "enumTitles": [
                "Activités des organisations associatives et administration publique",
                "Activités informatiques",
                "Activités juridiques et comptables",
                "Agroalimentaire",
                "Automobile, aéronautique et autres matériels de transport",
                "Banque et Assurances",
                "Bois - Papier - Imprimerie",
                "Chimie - Caoutchouc - Plastique",
                "Commerce interentreprises",
                "Communication et médias",
                "Conseil et gestion des entreprises",
                "Construction",
                "Distribution généraliste et spécialisée",
                "Energies - Eau",
                "Equipements électriques et électroniques",
                "Formation initiale et continue",
                "Gestion des déchets",
                "Hôtellerie - Restauration - Loisirs",
                "Immobilier",
                "Industrie pharmaceutique",
                "Ingénierie - R et D",
                "Intermédiaires du recrutement",
                "Mécanique - Métallurgie",
                "Meuble, Textile et autres industries manufacturières",
                "Santé - action sociale",
                "Services divers aux entreprises",
                "Télécommunications",
                "Transports et logistique",
                "Autres"
              ]
            },
            "default": []
          },
          "jobFunctions": {
            "title": "Job functions",
            "type": "array",
            "description": "Job family (10) or sub-function (46), APEC's own classification.",
            "items": {
              "type": "string",
              "enum": [
                "101828",
                "101829",
                "101830",
                "101831",
                "101832",
                "101833",
                "101834",
                "101835",
                "101836",
                "101837",
                "101782",
                "101783",
                "101784",
                "101785",
                "101786",
                "101787",
                "101788",
                "101789",
                "101790",
                "101791",
                "101792",
                "101793",
                "101794",
                "101795",
                "101796",
                "101797",
                "101798",
                "101799",
                "101800",
                "101801",
                "101802",
                "101803",
                "101804",
                "101805",
                "101806",
                "101807",
                "101808",
                "101809",
                "101810",
                "101811",
                "101812",
                "101813",
                "101814",
                "101815",
                "101816",
                "101817",
                "101818",
                "101819",
                "101820",
                "101821",
                "101822",
                "101823",
                "101824",
                "101825",
                "101826",
                "101827"
              ],
              "enumTitles": [
                "Commercial, Marketing",
                "Communication, Création",
                "Direction d'entreprise",
                "Etudes, Recherche et Développement",
                "Gestion, Finance, Administration",
                "Informatique",
                "Production Industrielle, Travaux, Chantiers",
                "Ressources Humaines",
                "Sanitaire, Social, Culture",
                "Services Techniques",
                "Commercial, Marketing › Administration des ventes et SAV",
                "Commercial, Marketing › Chargé d'affaires, technico-commercial",
                "Commercial, Marketing › Commercial",
                "Commercial, Marketing › Commerce international",
                "Commercial, Marketing › Direction commerciale et marketing",
                "Commercial, Marketing › Direction régionale et d'agence",
                "Commercial, Marketing › Marketing",
                "Commercial, Marketing › Ventes en magasin",
                "Communication, Création › Communication",
                "Communication, Création › Création",
                "Communication, Création › Documentation, rédaction technique",
                "Communication, Création › Journalisme, édition",
                "Direction d'entreprise › Adjoint, conseil de direction",
                "Direction d'entreprise › Direction générale",
                "Etudes, Recherche et Développement › Conception, recherche",
                "Etudes, Recherche et Développement › Direction recherche et développement",
                "Etudes, Recherche et Développement › Etudes socio-économiques",
                "Etudes, Recherche et Développement › Projets scientifiques et techniques",
                "Etudes, Recherche et Développement › Test, essai, validation, expertise",
                "Gestion, Finance, Administration › Administration, gestion, organisation",
                "Gestion, Finance, Administration › Comptabilité",
                "Gestion, Finance, Administration › Contrôle de gestion, audit",
                "Gestion, Finance, Administration › Direction gestion, finance",
                "Gestion, Finance, Administration › Droit, fiscalité",
                "Gestion, Finance, Administration › Finance, trésorerie",
                "Informatique › Direction informatique",
                "Informatique › Exploitation, maintenance informatique",
                "Informatique › Informatique de gestion",
                "Informatique › Informatique industrielle",
                "Informatique › Informatique web, sites et portails Internet",
                "Informatique › Maîtrise d'ouvrage et fonctionnel",
                "Informatique › Système, réseaux, données",
                "Production Industrielle, Travaux, Chantiers › Cadres de chantier",
                "Production Industrielle, Travaux, Chantiers › Cadres de production industrielle",
                "Production Industrielle, Travaux, Chantiers › Direction d'unité industrielle",
                "Ressources Humaines › Administration des RH",
                "Ressources Humaines › Développement des RH",
                "Ressources Humaines › Direction des ressources humaines",
                "Ressources Humaines › Formation initiale et continue",
                "Sanitaire, Social, Culture › Activités sanitaires, sociales et culturelles",
                "Services Techniques › Achats",
                "Services Techniques › Direction des services techniques",
                "Services Techniques › Logistique",
                "Services Techniques › Maintenance, sécurité",
                "Services Techniques › Process, méthodes",
                "Services Techniques › Qualité"
              ]
            },
            "default": []
          },
          "jobRoles": {
            "title": "Job roles (métiers)",
            "maxItems": 50,
            "type": "array",
            "description": "APEC's 502 métiers, by name (`Data engineer`, `Contrôleur de gestion`, case and accents ignored) or id. Narrower than **Job functions**; offers of any selected function OR role are kept. Each offer's métier is in `jobRole` (with details).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "positionStatus": {
            "title": "Position status",
            "type": "array",
            "description": "Status of the position.",
            "items": {
              "type": "string",
              "enum": [
                "PRIVATE_EXECUTIVE",
                "PUBLIC_EXECUTIVE",
                "TECHNICIAN"
              ],
              "enumTitles": [
                "Cadre du secteur privé",
                "Cadre du secteur public / Armées",
                "Agent de maîtrise / Technicien"
              ]
            },
            "default": []
          },
          "salaryMin": {
            "title": "Min salary (k€ / year)",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Gross annual salary floor in thousands of euros, e.g. `45`. APEC keeps every offer whose published range overlaps [min, max]; offers with 'A négocier' (no figure) are kept too."
          },
          "salaryMax": {
            "title": "Max salary (k€ / year)",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Gross annual salary ceiling in thousands of euros, e.g. `70`."
          },
          "contractDurationBand": {
            "title": "Contract duration",
            "enum": [
              "ANY",
              "1_6",
              "7_12",
              "13_PLUS"
            ],
            "type": "string",
            "description": "Length of fixed-term contracts (CDD, interim…). One band only: apec.fr accepts a single value.",
            "default": "ANY"
          },
          "educationLevel": {
            "title": "Education level",
            "enum": [
              "ANY",
              "BAC_3",
              "BAC_4",
              "BAC_5",
              "BAC_5_PLUS"
            ],
            "type": "string",
            "description": "Degree asked for. apec.fr fills it on internships and work-study offers (half of the internships), rarely elsewhere.",
            "default": "ANY"
          },
          "internshipDuration": {
            "title": "Internship duration",
            "enum": [
              "ANY",
              "LESS_THAN_1",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6"
            ],
            "type": "string",
            "description": "Internships only (combine with contract type `Stage`).",
            "default": "ANY"
          },
          "startDateWithin": {
            "title": "Start date",
            "enum": [
              "ANY",
              "ASAP",
              "WITHIN_2_MONTHS",
              "AFTER_2_MONTHS"
            ],
            "type": "string",
            "description": "When the job starts.",
            "default": "ANY"
          },
          "travelZones": {
            "title": "Business travel",
            "type": "array",
            "description": "Travel the job requires (`travelZone` in the output, with details).",
            "items": {
              "type": "string",
              "enum": [
                "NONE",
                "DEPARTMENTAL",
                "REGIONAL",
                "NATIONAL",
                "EUROPEAN_UNION",
                "INTERNATIONAL"
              ],
              "enumTitles": [
                "No travel",
                "Within the department",
                "Regional",
                "National",
                "European Union",
                "International"
              ]
            },
            "default": []
          },
          "onlyGeolocated": {
            "title": "Only offers with coordinates",
            "type": "boolean",
            "description": "Keep only the offers apec.fr can place on a map (`isGeolocated`, `latitude`, `longitude` filled: ≈ 97 % of the board).",
            "default": false
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "0 = off. With cities in **Locations**: a radius around each city (apec.fr adds the offers of the city itself; departments, regions and countries are refused). With **Latitude** / **Longitude**: around that point, **Locations** left empty. Each offer gets `distanceKm`.",
            "default": 0
          },
          "latitude": {
            "title": "Latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Centre of the radius, e.g. `45.764` (Lyon). Set together with **Longitude** and **Radius (km)**."
          },
          "longitude": {
            "title": "Longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Centre of the radius, e.g. `4.8357` (Lyon)."
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Only offers whose publication date (`publishedAt`: the date apec.fr shows, which a re-post moves to the day the offer came back to the top) is on or after this date: `2026-09-01`, or a period before now such as `7 days`, `2 weeks`, `1 month` (API: `24 hours` and full ISO date-times work too). With the date sort, the crawl stops at the first page older than that. Add **Skip re-posted offers** for truly new offers."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only offers published on or before this date (the whole day is included), or older than a period such as `30 days`."
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "type": "array",
            "description": "Drop the offers whose title contains one of these words (case and accents ignored), e.g. `stage`, `alternance`, `senior`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyNameContains": {
            "title": "Company name contains",
            "maxItems": 50,
            "type": "array",
            "description": "Keep only the offers whose company name contains one of these texts (case and accents ignored). Confidential offers have no company name and are dropped.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "maxItems": 50,
            "type": "array",
            "description": "Drop the offers whose company name contains one of these texts, e.g. `cadremploi`, `Meteojob` (job boards reselling offers).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeConfidential": {
            "title": "Exclude confidential offers",
            "type": "boolean",
            "description": "Drop the offers whose employer is hidden (`isConfidential`).",
            "default": false
          },
          "onlyLowApplicantCount": {
            "title": "Only offers with few applicants",
            "type": "boolean",
            "description": "Keep only the offers apec.fr flags as having received few applications (`lowApplicantCount`).",
            "default": false
          },
          "requireSalary": {
            "title": "Only offers with a salary figure",
            "type": "boolean",
            "description": "Drop the 'A négocier' offers: keep only those with an amount (`salaryMin` or `salaryMax`), about 2 offers in 3.",
            "default": false
          },
          "postingOrigins": {
            "title": "Posting origins",
            "type": "array",
            "description": "How the offer reached apec.fr (`postingOrigin`). Empty = all. Leave `AGREGATION` out to skip the offers resold by other job boards (≈ 40 % of the board).",
            "items": {
              "type": "string",
              "enum": [
                "ADEP",
                "SITE_WEB_APEC",
                "AGREGATION",
                "IMPORT_XML",
                "AUTRE"
              ],
              "enumTitles": [
                "ADEP (APEC recruiter back-office)",
                "SITE_WEB_APEC (posted on apec.fr)",
                "AGREGATION (resold by partner job boards)",
                "IMPORT_XML (multiposting feed)",
                "AUTRE (other)"
              ]
            },
            "default": []
          },
          "skipReposts": {
            "title": "Skip re-posted offers",
            "type": "boolean",
            "description": "Drop the offers whose first publication is older than the date apec.fr shows (`isRepost`): offers pushed back to the top, often weeks old (16 of the 30 newest offers of the board on 2026-09-17). Needs **Include details** (the first publication date comes with the details); a dropped offer is not charged.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new offers",
            "type": "boolean",
            "description": "Skip the offers that a previous run (same **Memory key**) already delivered, re-posted ones included: they are not saved and not charged, and their details are not even opened. A date-sorted search is read down to the oldest offer the last run delivered for it, no further — an older offer never comes: one that run left out (its cap), or one apec.fr publishes late under an older date; **Reset the memory** reads deeper. First run = everything is new.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new offers**. Give each schedule / task its own key (e.g. `data-lyon`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every offer again. Untick it afterwards.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "Drop empty fields",
            "type": "boolean",
            "description": "Remove null values, empty texts and empty lists from every offer: a compact JSON, smaller exports (e.g. the 26 detail fields of a run without **Include details**). Off: every offer has all the fields (stable CSV columns). The dataset export cannot do this: its `skipEmpty` / `clean` options drop empty offers, not empty fields.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies, for the search pages: the offer pages always go through the proxy included in the price, whatever you set here. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel. Keep 1: the pace is set by \"Max requests per minute\".",
            "default": 1
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Global request rate (search pages + offer details). Lower it if the log shows HTTP 429 / 403.",
            "default": 120
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}