{
  "openapi": "3.0.1",
  "info": {
    "title": "YTJobs Scraper: YouTube Video Editor Jobs, Pay and New Alerts",
    "description": "Scrape YTJobs (ytjobs.co), the YouTube job board: video editor, thumbnail designer, scriptwriter and other creator jobs with pay as yearly and hourly figures, channel subscribers, skills and exact posting time. Monitor mode saves only new jobs; channels mode lists hiring YouTube channels.",
    "version": "0.1",
    "x-build-id": "hh9JwRtWsnttrawQV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~ytjobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-ytjobs-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/getascraper~ytjobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-ytjobs-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/getascraper~ytjobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-ytjobs-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": {
          "mode": {
            "title": "What to collect",
            "enum": [
              "jobs",
              "monitor",
              "channels"
            ],
            "type": "string",
            "description": "Jobs: every matching job on the ytjobs.co board. Monitor: only jobs that are new (or changed) since your last run, for scheduled runs. Channels: the ytjobs.co directory of hiring YouTube channels, as a lead list.",
            "default": "jobs"
          },
          "startUrls": {
            "title": "ytjobs.co job or channel links",
            "type": "array",
            "description": "Optional. A job link (https://ytjobs.co/job/45013) returns that exact job, even if it is closed. A channel link (https://ytjobs.co/channel/1893) limits the run to that channel's jobs.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "channels": {
            "title": "Channels",
            "type": "array",
            "description": "Optional. Only jobs from these channels. Accepts a ytjobs.co channel link or id, or a YouTube handle such as @visualventure or https://youtube.com/@visualventure.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "roles": {
            "title": "Roles",
            "type": "array",
            "description": "Only jobs for these roles. Pick several at once (for example Video Editor and Thumbnail Designer). Leave empty for every role.",
            "items": {
              "type": "string",
              "enum": [
                "video-editor",
                "creative-director",
                "thumbnail-designer",
                "channel-manager",
                "youtube-strategist",
                "scriptwriter",
                "youtube-producer",
                "voice-over",
                "other"
              ],
              "enumTitles": [
                "Video Editor",
                "Creative Director",
                "Thumbnail Designer",
                "Channel Manager",
                "YouTube Strategist",
                "Scriptwriter",
                "YouTube Producer",
                "Voice Over",
                "Other role"
              ]
            },
            "default": []
          },
          "jobTypes": {
            "title": "Job types",
            "type": "array",
            "description": "Full-time jobs show a yearly salary, part-time jobs an hourly rate, and per-project jobs a price per project. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "per-project"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Per project"
              ]
            },
            "default": []
          },
          "locationTypes": {
            "title": "Work location",
            "type": "array",
            "description": "Remote, hybrid or on-site. Most YouTube jobs are remote. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            },
            "default": []
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Matches the job title, channel name, role, video styles and channel niches. Separate several words with commas to match any of them (for example: documentary, true crime). With job details on, the job description is searched too.",
            "default": ""
          },
          "featuredOnly": {
            "title": "Featured jobs only",
            "type": "boolean",
            "description": "Only jobs the employer paid to feature at the top of the board.",
            "default": false
          },
          "lowCompetitionOnly": {
            "title": "Few applicants only",
            "type": "boolean",
            "description": "Uses the site's own 'low on applicants' filter. ytjobs.co decides which jobs qualify; applicant numbers themselves are not public.",
            "default": false
          },
          "includeClosed": {
            "title": "Include closed and expired jobs",
            "type": "boolean",
            "description": "The board still lists some jobs that are closed or expired. Turn on to keep them (useful for hiring history); off returns open jobs only.",
            "default": false
          },
          "minYearlyPay": {
            "title": "Minimum yearly pay (USD)",
            "minimum": 1,
            "maximum": 10000000,
            "type": "integer",
            "description": "Only jobs whose posted pay can reach this yearly amount. Hourly rates are compared at 2,080 hours a year (40 h x 52 weeks). Per-project jobs and jobs without pay are left out when this is set."
          },
          "minHourlyPay": {
            "title": "Minimum hourly pay (USD)",
            "minimum": 0.01,
            "maximum": 10000,
            "type": "number",
            "description": "Only jobs whose posted pay can reach this hourly rate. Yearly salaries are divided by 2,080 hours. Per-project jobs and jobs without pay are left out when this is set."
          },
          "payListedOnly": {
            "title": "Only jobs that list pay",
            "type": "boolean",
            "description": "Skip jobs that do not show any pay amount.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only jobs posted in the last N days, based on the exact posting time the site publishes."
          },
          "experienceMin": {
            "title": "Minimum experience asked for",
            "minimum": 0,
            "maximum": 50,
            "type": "number",
            "description": "Only jobs that ask for at least this much experience, as the employer set it on ytjobs.co. Jobs that state no experience are left out when this is set."
          },
          "experienceMax": {
            "title": "Maximum experience asked for",
            "minimum": 0,
            "maximum": 50,
            "type": "number",
            "description": "Only jobs that ask for at most this much experience, so you can find jobs you already qualify for. Jobs that state no experience are kept."
          },
          "skills": {
            "title": "Skills",
            "type": "array",
            "description": "Only jobs that list at least one of these skills, for example Premiere Pro, After Effects or ElevenLabs. Partial names match.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Required languages",
            "type": "array",
            "description": "Only jobs that require at least one of these languages, for example Spanish.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "videoStyles": {
            "title": "Video styles",
            "type": "array",
            "description": "Only jobs whose channel makes these kinds of videos, for example Documentary, Faceless, Shorts/Reels, Gameplay or Podcast. Partial names match.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "channelCategories": {
            "title": "Channel niches",
            "type": "array",
            "description": "Only jobs from channels in these niches, for example Gaming, Education, Crime or Business and Finance. Partial names match.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minChannelSubscribers": {
            "title": "Minimum channel subscribers",
            "minimum": 1,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Only jobs from channels with at least this many YouTube subscribers."
          },
          "maxChannelSubscribers": {
            "title": "Maximum channel subscribers",
            "minimum": 1,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Only jobs from channels with at most this many YouTube subscribers, for example to find smaller creators."
          },
          "includeDetails": {
            "title": "Include job details",
            "type": "boolean",
            "description": "Adds the full description (HTML and plain text), apply form link found in the description, expiry date, start date, experience, languages, skills (with AI tools marked), referral bonus and example videos with view counts. One extra request per job.",
            "default": false
          },
          "includeChannel": {
            "title": "Include channel profile",
            "type": "boolean",
            "description": "Adds the hiring channel's exact subscribers, total views, video count, website, description, country and how many jobs it has posted on ytjobs.co. Charged once per channel per run, even when several jobs share the channel.",
            "default": false
          },
          "includeChannelVideos": {
            "title": "Include channel's recent videos",
            "type": "boolean",
            "description": "Also adds the channel's newest videos listed on ytjobs.co with views, likes and comments, its latest upload date and average views. Turns on the channel profile.",
            "default": false
          },
          "maxChannelVideos": {
            "title": "Recent videos per channel",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many of the channel's newest videos to include when recent videos are on.",
            "default": 5
          },
          "maxItems": {
            "title": "Maximum rows",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "The most rows this run saves (jobs, changes or channels). The board has a few hundred open jobs, so 500 covers all of them. 0 means no limit.",
            "default": 20
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Monitor mode only. A label for this monitor's memory, so two schedules with different purposes never mix. Runs with the same name and the same filters share one history.",
            "default": ""
          },
          "monitorChangeTypes": {
            "title": "Changes to save",
            "type": "array",
            "description": "New: jobs not seen before. Updated: title, pay, type, location or featured status changed. Closed: the job was closed or left the board. Reopened: a closed job is open again.",
            "items": {
              "type": "string",
              "enum": [
                "NEW",
                "UPDATED",
                "CLOSED",
                "REOPENED"
              ],
              "enumTitles": [
                "New jobs",
                "Updated jobs",
                "Closed jobs",
                "Reopened jobs"
              ]
            },
            "default": [
              "NEW"
            ]
          },
          "monitorBaselineFirstRun": {
            "title": "First run only remembers the current jobs",
            "type": "boolean",
            "description": "On: the first run saves no rows and only remembers today's jobs, so later runs save truly new jobs only. Off: the first run saves the current jobs as new.",
            "default": false
          },
          "closedAfterMissedRuns": {
            "title": "Missed runs before a job counts as closed",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "A job that disappears from the board is reported closed after this many runs in a row without it. A job the board itself marks closed is reported at once.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed in normal use: the Actor connects directly and switches to Apify datacenter proxy on its own if ytjobs.co refuses the connection. Set a proxy here only if you want to force one.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}