{
  "openapi": "3.0.1",
  "info": {
    "title": "APEC France Jobs Scraper",
    "description": "[💰 $0.9 / 1K] Extract executive and cadre-level job listings from APEC.fr — France's national jobs board. Search by keyword, location, or department; filter by contract type, experience, and salary. Returns title, company, salary, full description, contract type, and application link per job.",
    "version": "1.0",
    "x-build-id": "S7QqQJhoVqeLd6A4r"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~apec-fr-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-apec-fr-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/solidcode~apec-fr-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-apec-fr-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/solidcode~apec-fr-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-apec-fr-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": {
          "searchUrls": {
            "title": "APEC Search URLs",
            "type": "array",
            "description": "Paste one or more APEC search URLs directly from your browser (e.g. https://www.apec.fr/candidat/recherche-emploi.html?motsCles=ingenieur&lieux=...). Use this when you've already built a complex filter set in the APEC UI and want to copy the URL in. When provided, the structured filters below are ignored.",
            "items": {
              "type": "string"
            }
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Job title, role, or skill keywords (e.g. 'ingénieur logiciel', 'chef de projet', 'data scientist'). French preferred — APEC is a French site."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City or region name (e.g. 'Paris', 'Lyon', 'Île-de-France', 'Toulouse'). When set, takes priority over Department."
          },
          "department": {
            "title": "Department",
            "type": "string",
            "description": "French department code, two digits (e.g. '75' Paris, '69' Rhône, '13' Bouches-du-Rhône, '92' Hauts-de-Seine). Ignored when Location is set."
          },
          "contractTypes": {
            "title": "Contract Types",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include jobs matching these contract types. Empty = all types.",
            "items": {
              "type": "string",
              "enum": [
                "CDI",
                "CDD",
                "internship",
                "apprenticeship"
              ],
              "enumTitles": [
                "CDI (permanent contract)",
                "CDD (fixed-term contract)",
                "Internship (Stage)",
                "Apprenticeship (Alternance)"
              ]
            },
            "default": []
          },
          "experienceLevels": {
            "title": "Experience Levels",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include jobs matching these experience levels. Empty = all levels.",
            "items": {
              "type": "string",
              "enum": [
                "junior",
                "1to7",
                "7plus",
                "senior"
              ],
              "enumTitles": [
                "Junior (0-3 years)",
                "Mid-level (1-7 years)",
                "Senior (7+ years)",
                "Expert / Director"
              ]
            },
            "default": []
          },
          "teleworkLevels": {
            "title": "Telework / Remote Work",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include jobs offering these telework arrangements. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "full",
                "partial",
                "onsite"
              ],
              "enumTitles": [
                "Full remote (Télétravail total)",
                "Hybrid / Partial (Télétravail partiel)",
                "On-site only (Sur site)"
              ]
            },
            "default": []
          },
          "minSalary": {
            "title": "Minimum Annual Salary (EUR)",
            "minimum": 0,
            "maximum": 500000,
            "type": "integer",
            "description": "Only include jobs with an annual salary at or above this amount, in euros (e.g. 45000 for 45 k€). Listings without a salary disclosure may still appear — APEC's filter is inclusive of unspecified salaries. Leave blank for no filter."
          },
          "maxResults": {
            "title": "Maximum Results",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on total job rows returned across all sources. Default 100 — increase for bigger runs, or set to 0 for no cap (an internal upper bound of 50,000 still applies to prevent runaway pagination). The actor stops requesting new pages once this number is hit but keeps the full last page even if it slightly overshoots.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}