{
  "openapi": "3.0.1",
  "info": {
    "title": "Free-Work Jobs Scraper - IT Missions, Day Rates (TJM)",
    "description": "Scrape Free-Work (free-work.com) freelance IT missions and tech jobs in France: day rate (TJM), salary, duration, remote mode, skills, place, company and full description. Search by keyword, city, contract or minimum rate. Monitor mode. Export to JSON, CSV or Excel, or via API.",
    "version": "1.0",
    "x-build-id": "QvFsNx7wvLgGfamna"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyscrape~free-work-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyscrape-free-work-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/steadyscrape~free-work-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-steadyscrape-free-work-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/steadyscrape~free-work-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-steadyscrape-free-work-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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Skills, roles or words as you would type them in Free-Work's search, e.g. <code>Java</code>, <code>Data engineer</code>, <code>SAP FI</code>, <code>DevOps</code>, <code>Chef de projet</code>. Each keyword is its own search with the filters below. Leave empty, with no link, to read every posting on the site (about 11,000).",
            "items": {
              "type": "string"
            }
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "Keep only postings offering one of these contracts. Freelance missions (contractor) carry a day rate (TJM); permanent jobs (CDI) a yearly salary. Empty keeps every contract.",
            "items": {
              "type": "string",
              "enum": [
                "contractor",
                "permanent",
                "fixed-term",
                "internship",
                "apprenticeship"
              ],
              "enumTitles": [
                "Freelance mission (contractor)",
                "Permanent (CDI)",
                "Fixed-term (CDD)",
                "Internship",
                "Apprenticeship"
              ]
            },
            "default": []
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, departments, regions or countries as people write them: <code>Paris</code>, <code>Lyon</code>, <code>Hauts-de-Seine</code> or <code>92</code>, <code>Île-de-France</code>, <code>Belgique</code>, <code>Suisse</code>, <code>United Kingdom</code>. Each is matched by Free-Work's own place search; postings in any of them are kept. A place the site does not know stops the run's searches with a free row, so nothing is charged for postings from everywhere. Leave empty for every place.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locationRadiusKm": {
            "title": "Radius around the locations (km)",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Also keep postings within this many kilometres of the locations, as the site's radius filter does. Needs a location."
          },
          "remoteModes": {
            "title": "Remote work",
            "type": "array",
            "description": "Keep only postings with one of these remote modes. Empty keeps every mode, including postings that say nothing.",
            "items": {
              "type": "string",
              "enum": [
                "full",
                "partial",
                "none"
              ],
              "enumTitles": [
                "Full remote",
                "Partial remote (hybrid)",
                "On site"
              ]
            },
            "default": []
          },
          "experienceLevels": {
            "title": "Experience",
            "type": "array",
            "description": "Keep only postings asking one of these levels, as the posting states it.",
            "items": {
              "type": "string",
              "enum": [
                "junior",
                "intermediate",
                "senior",
                "expert"
              ],
              "enumTitles": [
                "Junior",
                "Intermediate",
                "Senior",
                "Expert"
              ]
            },
            "default": []
          },
          "minDailyRate": {
            "title": "Minimum day rate (TJM)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Only missions whose day rate reaches this amount, as the site's own filter applies it (in the posting's currency, mostly euros)."
          },
          "minAnnualSalary": {
            "title": "Minimum yearly salary",
            "minimum": 1,
            "maximum": 10000000,
            "type": "integer",
            "description": "Only jobs whose yearly salary reaches this amount, as the site's own filter applies it."
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "any",
              "less_than_24_hours",
              "less_than_7_days",
              "less_than_14_days",
              "less_than_30_days"
            ],
            "type": "string",
            "description": "Only postings published in the last days. Combine with a schedule and \"Only new jobs\" for a daily feed.",
            "default": "any"
          },
          "minDurationMonths": {
            "title": "Minimum mission duration (months)",
            "minimum": 1,
            "maximum": 48,
            "type": "integer",
            "description": "Only missions lasting at least this many months."
          },
          "maxDurationMonths": {
            "title": "Maximum mission duration (months)",
            "minimum": 1,
            "maximum": 48,
            "type": "integer",
            "description": "Only missions lasting at most this many months. 48 means no maximum, as on the site."
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Newest postings first, or the site's relevance order for the keyword.",
            "default": "newest"
          },
          "searchUrls": {
            "title": "Free-Work search links",
            "type": "array",
            "description": "Links of searches made on free-work.com with its filters, e.g. <code>https://www.free-work.com/fr/tech-it/jobs?query=java&contracts=contractor&locations=fr~ile-de-france~~</code>. Each link is its own search with the link's own filters; the form's filters above do not apply to it. Landing pages (…/jobs/java) and posting pages are not taken.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerSearch": {
            "title": "Max jobs per search",
            "minimum": 0,
            "type": "integer",
            "description": "Stop each search after this many postings. 0 means all of them.",
            "default": 100
          },
          "onlyNewJobs": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "Deliver, and charge, only postings that an earlier run with the same searches and filters has not delivered. Made for scheduled runs.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}