{
  "openapi": "3.0.1",
  "info": {
    "title": "Levels.fyi Salary & Compensation Scraper — Enriched Records",
    "description": "Scrape individual tech compensation records from Levels.fyi by company and job family — base, stock, bonus, total comp, level, focus, YOE, location and demographics. Every row is pre-enriched with the full company profile, level metadata and p10–p90 percentile bands, plus incremental monitoring.",
    "version": "0.1",
    "x-build-id": "aPNWmjkY1l9wV8EPE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/corvuslab~levelsfyi-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-corvuslab-levelsfyi-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/corvuslab~levelsfyi-scraper/runs": {
      "post": {
        "operationId": "runs-sync-corvuslab-levelsfyi-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/corvuslab~levelsfyi-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-corvuslab-levelsfyi-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": {
          "companies": {
            "title": "🏢 Companies",
            "type": "array",
            "description": "Company names or levels.fyi slugs, e.g. \"Google\", \"Meta\", \"goldman-sachs\". Names are matched automatically. Leave empty to demo with Google.",
            "items": {
              "type": "string"
            }
          },
          "jobFamilies": {
            "title": "💼 Job families",
            "type": "array",
            "description": "Which roles to pull. Selecting several fetches each one. Defaults to Software Engineer.",
            "items": {
              "type": "string",
              "enum": [
                "software-engineer",
                "product-manager",
                "data-scientist",
                "software-engineering-manager",
                "technical-program-manager",
                "solution-architect",
                "program-manager",
                "project-manager",
                "data-science-manager",
                "technical-writer",
                "product-designer",
                "industrial-designer",
                "fashion-designer",
                "product-design-manager",
                "ux-researcher",
                "graphic-designer",
                "hardware-engineer",
                "mechanical-engineer",
                "electrical-engineer",
                "civil-engineer",
                "biomedical-engineer",
                "chemical-engineer",
                "aerospace-engineer",
                "materials-engineer",
                "optical-engineer",
                "controls-engineer",
                "geological-engineer",
                "mep-engineer",
                "prompt-engineer",
                "security-analyst",
                "information-technologist",
                "management-consultant",
                "business-development",
                "investment-banker",
                "financial-analyst",
                "accountant",
                "venture-capitalist",
                "actuary",
                "underwriter",
                "marketing",
                "marketing-operations",
                "business-analyst",
                "data-analyst",
                "copywriter",
                "corp-dev",
                "biz-ops",
                "bizops-manager",
                "partner-manager",
                "customer-service",
                "customer-service-ops",
                "claims-adjuster",
                "meteorologist",
                "trust-and-safety",
                "data-annotator",
                "sales",
                "sales-engineer",
                "customer-success",
                "revops",
                "sales-enablement",
                "tam",
                "gtm-engineer",
                "human-resources",
                "recruiter",
                "total-rewards",
                "people-ops",
                "legal",
                "regulatory-affairs",
                "paralegal",
                "compliance-officer",
                "legal-ops",
                "administrative-assistant",
                "chief-of-staff",
                "founder",
                "facilities-manager",
                "property-manager",
                "real-estate-agent"
              ],
              "enumTitles": [
                "Software Engineer",
                "Product Manager",
                "Data Scientist",
                "Software Engineering Manager",
                "Technical Program Manager",
                "Solution Architect",
                "Program Manager",
                "Project Manager",
                "Data Science Manager",
                "Technical Writer",
                "Product Designer",
                "Industrial Designer",
                "Fashion Designer",
                "Product Design Manager",
                "UX Researcher",
                "Graphic Designer",
                "Hardware Engineer",
                "Mechanical Engineer",
                "Electrical Engineer",
                "Civil Engineer",
                "Biomedical Engineer",
                "Chemical Engineer",
                "Aerospace Engineer",
                "Materials Engineer",
                "Optical Engineer",
                "Controls Engineer",
                "Geological Engineer",
                "MEP Engineer",
                "Prompt Engineer",
                "Cybersecurity Analyst",
                "Information Technologist (IT)",
                "Management Consultant",
                "Business Development",
                "Investment Banker",
                "Financial Analyst",
                "Accountant",
                "Venture Capitalist",
                "Actuary",
                "Underwriter",
                "Marketing",
                "Marketing Operations",
                "Business Analyst",
                "Data Analyst",
                "Copywriter",
                "Corporate Development",
                "Business Operations",
                "Business Operations Manager",
                "Partner Manager",
                "Customer Service",
                "Customer Service Operations",
                "Claims Adjuster",
                "Meteorologist",
                "Trust and Safety",
                "Data Annotator",
                "Sales",
                "Sales Engineer",
                "Customer Success",
                "Revenue Operations",
                "Sales Enablement",
                "Technical Account Manager",
                "Go-To-Market Engineer",
                "Human Resources",
                "Recruiter",
                "Total Rewards",
                "People Operations",
                "Legal",
                "Regulatory Affairs",
                "Paralegal",
                "Compliance Officer",
                "Legal Operations",
                "Administrative Assistant",
                "Chief of Staff",
                "Founder",
                "Facilities Manager",
                "Property Manager",
                "Real Estate Agent"
              ]
            },
            "default": [
              "software-engineer"
            ]
          },
          "locations": {
            "title": "📍 Locations",
            "type": "array",
            "description": "Optional. levels.fyi location slugs (e.g. \"united-states\", \"san-francisco-bay-area\", \"new-york-city-area\", \"india\") to scope each role to a metro/country. Leave empty for the default (worldwide/US) scope.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Start URLs",
            "type": "array",
            "description": "Optional. Paste levels.fyi company or role URLs directly, e.g. https://www.levels.fyi/companies/nvidia/salaries/hardware-engineer",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "🔢 Max records",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of compensation records to return across all targets. Set 0 for unlimited (bounded by how many the site exposes).",
            "default": 100
          },
          "compact": {
            "title": "📦 Compact records",
            "type": "boolean",
            "description": "Emit only the core compensation fields. Ideal for AI agents and MCP clients.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "🧹 Drop empty fields",
            "type": "boolean",
            "description": "Remove null, empty-string and empty-array fields from each record.",
            "default": false
          },
          "incrementalMode": {
            "title": "♻️ Incremental mode",
            "type": "boolean",
            "description": "Track state between runs and tag every record with a changeType (NEW / UPDATED / UNCHANGED / EXPIRED). Already-seen records are suppressed so a scheduled run only bills for new submissions.",
            "default": false
          },
          "stateKey": {
            "title": "🗝️ State key",
            "type": "string",
            "description": "Stable name for the tracked target set. Leave empty to derive one automatically from your companies + job families."
          },
          "emitUnchanged": {
            "title": "🔁 Include unchanged records",
            "type": "boolean",
            "description": "Also emit records already seen on a previous run.",
            "default": false
          },
          "emitExpired": {
            "title": "🗑️ Include expired records",
            "type": "boolean",
            "description": "Emit records present last run but gone now.",
            "default": false
          },
          "telegramToken": {
            "title": "💬 Telegram bot token",
            "type": "string",
            "description": "Bot token from @BotFather."
          },
          "telegramChatId": {
            "title": "🆔 Telegram chat ID",
            "type": "string",
            "description": "Chat or channel ID, e.g. \"-100123456789\" or \"@yourchannel\"."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack webhook URL",
            "type": "string",
            "description": "Slack incoming-webhook URL."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord webhook URL",
            "type": "string",
            "description": "Discord incoming-webhook URL."
          },
          "webhookUrl": {
            "title": "🪝 Webhook URL",
            "type": "string",
            "description": "Any HTTPS endpoint. Receives a JSON POST with the matched records — works with n8n, Make and Zapier."
          },
          "webhookHeaders": {
            "title": "🧾 Webhook headers",
            "type": "object",
            "description": "Extra headers for the webhook request, e.g. {\"Authorization\": \"Bearer xyz\"}."
          },
          "notificationLimit": {
            "title": "🔢 Records per notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many records to include in each notification message.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Optional. The scraper runs direct by default (cheapest and fastest). If runs get challenged at volume, enable Apify Proxy — Residential is the most reliable fallback.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxRequestRetries": {
            "title": "🔄 Max request retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a failed request before giving up on it.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}