{
  "openapi": "3.0.1",
  "info": {
    "title": "Levels.fyi Jobs Scraper",
    "description": "[💰 $1 / 1K] Extract tech jobs from Levels.fyi with the base and total pay Levels.fyi publishes, company type, headcount and valuation, locations and apply links. Search by keyword and location, filter by work arrangement, discipline, level or a pay floor, or paste Levels.fyi URLs.",
    "version": "1.0",
    "x-build-id": "PEr6TQiclRew2n6a5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~levels-fyi-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-levels-fyi-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~levels-fyi-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-levels-fyi-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~levels-fyi-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-levels-fyi-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": {
          "searchQueries": {
            "title": "Search Keywords",
            "maxItems": 50,
            "type": "array",
            "description": "Job titles or keywords to search for, such as 'Software Engineer', 'Data Scientist', or 'Product Manager'. Each keyword runs a separate search. Add up to 50 keywords per run; each is searched independently. Leave empty to collect the broadest result set for your location and filters.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region, or work arrangement to search in. Examples: 'San Francisco', 'New York', 'London', 'Remote'. Entering 'Remote', 'Hybrid' or 'Office' applies a work-arrangement filter instead of a place. Combined with each keyword. Leave empty to search everywhere."
          },
          "startUrls": {
            "title": "Direct Levels.fyi URLs",
            "maxItems": 50,
            "type": "array",
            "description": "Paste full Levels.fyi job-search URLs (e.g. https://www.levels.fyi/jobs?...) or individual job-listing URLs to scrape them directly. Useful when you already have a search dialed in on the website. Up to 50 URLs per run.",
            "items": {
              "type": "string"
            }
          },
          "workArrangement": {
            "title": "Work Arrangement",
            "enum": [
              "",
              "remote",
              "hybrid",
              "office"
            ],
            "type": "string",
            "description": "Filter by where the role is performed. Levels.fyi tags roughly 40% of listings with an arrangement, so choosing one returns only the tagged listings. Leave on 'Any' to include all arrangements, tagged or not.",
            "default": ""
          },
          "jobFamily": {
            "title": "Job Family",
            "enum": [
              "",
              "software-engineer",
              "software-engineering-manager",
              "data-scientist",
              "data-science-manager",
              "product-manager",
              "product-designer",
              "security-analyst",
              "hardware-engineer"
            ],
            "type": "string",
            "description": "Limit results to one engineering or product discipline. Leave on 'Any' to include all job families.",
            "default": ""
          },
          "level": {
            "title": "Seniority Level",
            "enum": [
              "",
              "internship",
              "entry",
              "mid_staff",
              "principal",
              "manager",
              "director",
              "executive"
            ],
            "type": "string",
            "description": "Limit results to one seniority level. Leave on 'Any' to include all levels.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort Results By",
            "enum": [
              "relevance",
              "total_compensation",
              "date_published"
            ],
            "type": "string",
            "description": "Order in which jobs are returned. 'Relevance' is the default ranking. Note that Levels.fyi ranks employers rather than individual listings, so with 'Total Compensation' or 'Date Posted' it decides which employers a search reaches, and the actor then orders every listing it collected so the dataset itself reads highest-paying first (or newest first). Listings with no pay figure — or no posting date — are placed at the end, and pay quoted in different currencies is compared at approximate exchange rates.",
            "default": "relevance"
          },
          "minTotalCompensation": {
            "title": "Minimum Total Compensation (USD per year)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip job listings that advertise less than this many US dollars a year in total compensation. A listing is kept when the top of its posted pay range reaches the figure, so roles whose range straddles it still come through. Listings that publish no pay figure at all are kept as well, because there is nothing to measure them against — filter those out in your own sheet if you only want priced roles. Pay quoted in another currency is compared at approximate exchange rates; the row always keeps the original currency and figure. Leave empty for no minimum."
          },
          "maxResults": {
            "title": "Max Results per Search",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of job listings to collect per search keyword (or per start URL). Set to 0 to collect everything Levels.fyi will serve for that keyword. A search stops as soon as your cap is reached, so it never returns more listings than you asked for. Listings repeated across pages — or shared between keywords — are deduplicated, so the final count can run slightly below your cap. One keyword reaches about 2,500 employers before Levels.fyi stops serving new ones, which is a few thousand listings; collecting that much takes a couple of minutes per keyword, so keep a cap in place unless you really want the full sweep. Use several keywords to widen coverage beyond a single keyword's ceiling.",
            "default": 100
          },
          "includeDescription": {
            "title": "Fetch Full Job Descriptions",
            "type": "boolean",
            "description": "Include the full job description (text and HTML) for each listing. Leave on for the most complete data — employment types, job family and the per-level total-comp estimates only come with the full record. Turn off for lighter records when you only need titles, companies, locations and compensation.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}