{
  "openapi": "3.0.1",
  "info": {
    "title": "France Travail Scraper — 961k+ French Jobs",
    "description": "Scrape francetravail.fr — 961,000+ active listings. ROME code filter, city + GPS radius, incremental change-detection mode, server-side recency filter. Structured salary, ROME codes, skills & full descriptions. No API key required.",
    "version": "1.0",
    "x-build-id": "lTPKEcLYnmERt2prV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/unfenced-group~france-travail-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-unfenced-group-france-travail-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/unfenced-group~france-travail-scraper/runs": {
      "post": {
        "operationId": "runs-sync-unfenced-group-france-travail-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/unfenced-group~france-travail-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-unfenced-group-france-travail-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": {
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Job title, skill, or sector keywords. Leave empty to retrieve all recent listings."
          },
          "romeCode": {
            "title": "ROME Code",
            "type": "string",
            "description": "Filter by French ROME occupational code (e.g. M1861 for software developer, J1303 for nurse, M1607 for accountant). Finds all listings under a specific occupation regardless of job title wording. Applied as a post-filter."
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "Search by city name (e.g. 'Paris', 'Lyon', 'Bordeaux'). Resolves automatically to the correct department. Combine with Radius to expand to nearby areas. Cannot be used together with Departments."
          },
          "radius": {
            "title": "Search Radius (km)",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "When City is set, expand the search to all departments whose centroid falls within this radius in kilometres. Set to 0 to restrict to the city's own department only. Example: city='Lyon', radius=50 covers Rhône, Ain, Isère and Loire.",
            "default": 0
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Filter by French department codes (e.g. '75' for Paris, '69' for Rhône). Leave empty to search all departments.",
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Filter by French region codes (e.g. '11' for Île-de-France, '84' for Auvergne-Rhône-Alpes). Leave empty for all regions.",
            "items": {
              "type": "string"
            }
          },
          "contractTypes": {
            "title": "Contract Types",
            "type": "array",
            "description": "Filter by contract type. Leave empty to include all types.",
            "items": {
              "type": "string",
              "enum": [
                "CDI",
                "CDD",
                "Interim / Temporary",
                "Freelance / Liberal",
                "Seasonal",
                "Franchise",
                "Commercial contract"
              ]
            }
          },
          "experience": {
            "title": "Experience Level",
            "type": "array",
            "description": "Filter by required experience level. Leave empty to include all levels.",
            "items": {
              "type": "string",
              "enum": [
                "No experience required",
                "1-3 years",
                "3-5 years",
                "5+ years"
              ]
            }
          },
          "qualificationLevel": {
            "title": "Qualification Level",
            "enum": [
              "",
              "Manoeuvre",
              "Specialised worker",
              "Qualified worker",
              "Highly qualified worker",
              "Technician / Supervisor",
              "Highly qualified technician",
              "Engineer / Executive",
              "Senior engineer / Executive",
              "Manager / Senior executive",
              "Cadre (director level)"
            ],
            "type": "string",
            "description": "Filter by required qualification level. Leave empty for all levels."
          },
          "fullTimeOnly": {
            "title": "Full-time Only",
            "type": "boolean",
            "description": "Return only full-time positions.",
            "default": false
          },
          "partTimeOnly": {
            "title": "Part-time Only",
            "type": "boolean",
            "description": "Return only part-time positions.",
            "default": false
          },
          "teleworkOnly": {
            "title": "Telework / Remote Only",
            "type": "boolean",
            "description": "Return only positions that include telework options.",
            "default": false
          },
          "handicapFriendly": {
            "title": "Disability-Friendly Employers Only",
            "type": "boolean",
            "description": "Return only listings from disability-inclusive employers.",
            "default": false
          },
          "alternanceOnly": {
            "title": "Alternance / Apprenticeship Only",
            "type": "boolean",
            "description": "Return only apprenticeship and work-study contracts.",
            "default": false
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "pertinence",
              "date"
            ],
            "type": "string",
            "description": "'pertinence' sorts by relevance. 'date' sorts by most recently posted first (recommended with daysOld).",
            "default": "pertinence"
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of job listings to save.",
            "default": 5
          },
          "publieeDepuis": {
            "title": "Posted Within (days)",
            "minimum": 0,
            "maximum": 31,
            "type": "integer",
            "description": "Server-side recency filter — only return listings posted within the last N days. Accepted values: 1, 3, 7, 14, 31. Any other value is rounded up to the next valid bucket. Set to 0 to disable. Use this instead of 'Max Age' for faster, lower-cost recency runs.",
            "default": 0
          },
          "daysOld": {
            "title": "Maximum Age (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Post-filter precision: only return listings posted within the last N days. Combine with 'Posted Within' + sortBy=date for maximum efficiency on daily feeds.",
            "default": 0
          },
          "skipReposts": {
            "title": "Skip Reposts",
            "type": "boolean",
            "description": "Skip listings already seen in a previous run. Requires at least one prior successful run.",
            "default": false
          },
          "changedOnly": {
            "title": "Changed Listings Only (Incremental Mode)",
            "type": "boolean",
            "description": "Only emit listings that are new OR have changed since the last run (title or description updated). Ideal for daily monitoring pipelines that need to detect updated offers without reprocessing the entire dataset.",
            "default": false
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Specific France Travail offer URLs to scrape directly. When provided, keyword and filter settings are ignored.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}