{
  "openapi": "3.0.1",
  "info": {
    "title": "France Travail Scraper $1💰 Jobs, Salaries & Apply Links",
    "description": "Scrape job offers from France Travail with titles, companies, locations, salaries, contracts, descriptions, skills, employer details, and apply links. Search by keyword, location, contract, sector, salary, sort options, or paste job/search URLs.",
    "version": "1.0",
    "x-build-id": "WVzWcR4iuJiC16K0V"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~francetravail-fr-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-francetravail-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/abotapi~francetravail-fr-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-francetravail-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/abotapi~francetravail-fr-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-francetravail-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "1. Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "search = build a search from keywords and filters. url = paste one or more France Travail search URLs and walk them forward.",
            "default": "search"
          },
          "queries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Job titles, skills, or hiring phrases such as \"data analyst\", \"cariste\", or \"assistant comptable\". Each line runs a separate search.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "A city, department code, region, or postal area applied to all searches (e.g. \"Paris\", \"75D\", \"69000\"). Leave empty to search across France."
          },
          "radius": {
            "title": "Search radius (km)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Radius around the location, in kilometres (0 = no radius). Only used when a location is set.",
            "default": 10
          },
          "publishedDate": {
            "title": "Publication recency",
            "enum": [
              "Last 24 hours",
              "Last 3 Days",
              "Last Week",
              "Last 2 Weeks",
              "Last Month"
            ],
            "type": "string",
            "description": "Keep only jobs posted within the chosen window."
          },
          "contractType": {
            "title": "Contract types",
            "type": "array",
            "description": "Contract types to include (permanent, fixed-term, temporary, apprenticeship, …). Allowed values: CDI, CDD, Intérim, CDI Intérimaire, Saisonnier, Contrat apprentissage, Cont. professionnalisation, Prépa.opérationnel.emploi, CDI de chantier ou d'opération, Contrat d'Engagement Educatif ….",
            "items": {
              "type": "string"
            }
          },
          "contractDuration": {
            "title": "Working time",
            "type": "array",
            "description": "Keep only full-time, part-time, or unspecified working-time listings. Allowed values: Temps plein, Temps partiel, Non renseignée.",
            "items": {
              "type": "string"
            }
          },
          "jobCategory": {
            "title": "Professional domains",
            "type": "array",
            "description": "Professional domains to include (IT, healthcare, logistics, hospitality, construction, …). Allowed values: Achats, Comptabilité, Gestion, Arts, Artisanat d'art, Banque, Assurance, Bâtiment, Travaux Publics, Commerce, Vente, Communication, Multimédia, Conseil, Etudes, Direction d'entreprise, Espaces verts et naturels, Agriculture, Pêche, Soins aux animaux, Hôtellerie - Restauration, Tourisme, Animation ….",
            "items": {
              "type": "string"
            }
          },
          "minSalary": {
            "title": "Minimum monthly gross salary (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop listings whose salary is below this monthly gross amount. Leave at 0 to keep all.",
            "default": 0
          },
          "experience": {
            "title": "Experience levels",
            "type": "array",
            "description": "Experience requirements to include (applied client-side from the job detail). Allowed values: Moins de 1 an, De 1 à 3 ans, Plus de 3 ans, Non renseignée.",
            "items": {
              "type": "string"
            }
          },
          "seniority": {
            "title": "Qualification levels",
            "type": "array",
            "description": "Executive, non-executive, or unspecified qualification levels. Allowed values: Cadre, Non cadre, Non renseignée.",
            "items": {
              "type": "string"
            }
          },
          "onlyFranceTravail": {
            "title": "Keep only France Travail listings",
            "type": "boolean",
            "description": "When ON, keep only offers published directly on France Travail (partner offers excluded).",
            "default": false
          },
          "inclusiveEmployer": {
            "title": "Disability-inclusive employers only",
            "type": "boolean",
            "description": "When ON, keep only offers from employers showing the Handi-engage commitment.",
            "default": false
          },
          "adaptedCompany": {
            "title": "Adapted companies only",
            "type": "boolean",
            "description": "When ON, keep only offers from adapted companies (entreprises adaptées).",
            "default": false
          },
          "sortBy": {
            "title": "Sort results",
            "enum": [
              "Most relevant | Pertinence",
              "Newest | Date"
            ],
            "type": "string",
            "description": "Sort by relevance or by publication date."
          },
          "urls": {
            "title": "Search URLs",
            "type": "array",
            "description": "One or more France Travail search URLs, e.g. https://candidat.francetravail.fr/offres/recherche?motsCles=developpeur. Multi-URL supported. Filters above are ignored in this mode; pagination starts at the page implied by the URL's range and walks forward.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max listings (the run cap)",
            "minimum": 1,
            "type": "integer",
            "description": "Global cap on the number of jobs to return across all searches. This is THE cap — Max pages defaults to unlimited and stops at this number.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per search (0 = unlimited)",
            "minimum": 0,
            "type": "integer",
            "description": "Per-search page limit (20 jobs per page). 0 means no page limit — the run stops at Max listings.",
            "default": 0
          },
          "fetchDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "Open each job page to add the full description, salary range, experience, skills, soft skills, employer block, and apply/contact links. Adds one request per job (billed as a detail-enrichment surcharge). Turn off for a faster, lighter run using only the search-card fields.",
            "default": true
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Residential proxy (any country) is recommended for the highest reliability. Some datacenter exit IPs may be geo-restricted.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send a condensed summary of each result into the apps you already use, via Model Context Protocol (MCP) connectors. The full record stays in the dataset. Leave empty to skip. Supported: Notion, Linear, Airtable, Apify."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}