{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper (H1B Visa Sponsor Flags, No Login)",
    "description": "Scrape LinkedIn jobs with no login: title, company, location, salary range, seniority, applicants, apply type, and remote or hybrid where stated. Each job carries the employer's US H-1B filing record, UK sponsor licence and median filed wage. Only-new mode for alerts. $1 per 1,000 jobs.",
    "version": "0.1",
    "x-build-id": "h1AvpxCHlKkKgu9tK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/locaihost~linkedin-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-locaihost-linkedin-jobs",
        "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/locaihost~linkedin-jobs/runs": {
      "post": {
        "operationId": "runs-sync-locaihost-linkedin-jobs",
        "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/locaihost~linkedin-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-locaihost-linkedin-jobs",
        "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": "Job search keywords",
            "type": "array",
            "description": "What you'd type into LinkedIn's job search, e.g. \"software engineer\", \"data analyst\". Each keyword is searched in every location. Optional when you paste start URLs or give companies.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Countries, cities or regions as you'd type them on LinkedIn, e.g. \"United States\", \"London\", \"Berlin, Germany\". Leave empty to search worldwide.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "LinkedIn job-search URLs",
            "type": "array",
            "description": "Optional. Paste searches straight from LinkedIn (linkedin.com/jobs/search?keywords=...), as many as you like; each is searched as its own search. Read from the URL: keywords, location, geoId, Date posted (f_TPR), Company (f_C), Easy Apply (f_AL), Under 10 applicants (f_EA) and distance. Experience level (f_E), Job type (f_JT) and Remote (f_WT) are ignored by LinkedIn's logged-out search, so we apply them from each job's page instead. Filters that need a signed-in member (e.g. In your network, Salary) are skipped and named in the run's status message. A URL's own filters define its search: the Posted within, company, distance, Easy Apply and under-10 inputs below apply to keyword searches only. Clear the keywords box if you only want your URLs searched.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "day",
              "week",
              "month",
              "any"
            ],
            "type": "string",
            "description": "Only jobs posted in this window.",
            "default": "week"
          },
          "maxJobsPerSearch": {
            "title": "Max jobs per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Per keyword and location, and per start URL. Leave empty for 25. LinkedIn shows at most about 1,000 results for one search.",
            "default": 25
          },
          "includeDetails": {
            "title": "Include full job details",
            "type": "boolean",
            "description": "Open each job for its description, published salary range, seniority level, employment type, industries and applicant count. Turn off for faster, card-only results.",
            "default": true
          },
          "includeAdSignals": {
            "title": "Add what the ad says",
            "type": "boolean",
            "description": "Add adSponsorship, adRelocation and adEvidence: whether the job ad itself offers or refuses visa sponsorship and relocation, with the sentence quoted. Free; read from the job details, so it needs full job details. Turn off to leave the columns out.",
            "default": true
          },
          "sponsorship": {
            "title": "Visa sponsorship",
            "enum": [
              "flag",
              "only-with-evidence",
              "off"
            ],
            "type": "string",
            "description": "\"Flag\" adds each employer's US H-1B filing record and UK sponsor licence to every job. \"Only with evidence\" keeps only jobs whose employer has filed for this kind of role or holds a UK licence. \"Off\" skips the check.",
            "default": "flag"
          },
          "onlyNew": {
            "title": "Only jobs new since the last run",
            "type": "boolean",
            "description": "Remembers what this saved task already returned, so a daily schedule becomes a job alert. Off by default so the first run returns everything.",
            "default": false
          },
          "seniority": {
            "title": "Experience levels (seniority)",
            "type": "array",
            "description": "Optional. Keep only these LinkedIn seniority levels: \"Internship\", \"Entry level\", \"Associate\", \"Mid-Senior level\", \"Director\", \"Executive\" (LinkedIn's f_E codes 1-6 work too). Read from each job's page, so job pages are opened even with full details off. Many employers leave the level as \"Not Applicable\".",
            "items": {
              "type": "string"
            }
          },
          "jobTypes": {
            "title": "Job types",
            "type": "array",
            "description": "Optional. Keep only these employment types, read from each job's page (LinkedIn's logged-out search ignores its own Job type filter).",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "internship",
                "volunteer",
                "other"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            }
          },
          "workplaceTypes": {
            "title": "Workplace types",
            "type": "array",
            "description": "Optional. Keep only on-site, remote or hybrid jobs. LinkedIn's public pages ignore its own workplace filter, so the type is read from what the job says: its location, a tag in the title such as \"(Remote)\", or an explicit line in the description such as \"This role is categorized as hybrid\". Jobs that don't say are left out, and jobs left out are not charged. Works best with full job details on.",
            "items": {
              "type": "string",
              "enum": [
                "on-site",
                "remote",
                "hybrid"
              ],
              "enumTitles": [
                "On-site",
                "Remote",
                "Hybrid"
              ]
            }
          },
          "companyIds": {
            "title": "Companies (LinkedIn company IDs or pages)",
            "type": "array",
            "description": "Optional. Search only these employers' jobs, applied by LinkedIn's own Company filter. Give the numeric ID (e.g. \"1441\" for Google, as in f_C=1441 of a LinkedIn URL) or the company page address (linkedin.com/company/stripe), which is opened once to read its ID. With no keywords, every job the company lists in your locations is searched.",
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Company names",
            "type": "array",
            "description": "Optional. Keep only jobs whose company name matches, e.g. \"Stripe\" (also keeps \"Stripe, Inc.\"; \"Amazon\" keeps \"Amazon Web Services (AWS)\"). With no keywords, each name is searched as a keyword. For an exact employer list, company IDs are faster.",
            "items": {
              "type": "string"
            }
          },
          "distanceMiles": {
            "title": "Distance (miles)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Optional. How far from a city location to search, as LinkedIn's own distance setting: 0, 5, 10, 25, 50 or 100. Leave empty for LinkedIn's default (about 25)."
          },
          "easyApplyOnly": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only jobs you apply to on LinkedIn itself (applied by LinkedIn's Easy Apply filter).",
            "default": false
          },
          "under10Applicants": {
            "title": "Under 10 applicants",
            "type": "boolean",
            "description": "Only jobs with fewer than 10 applicants so far (LinkedIn's own logged-out filter).",
            "default": false
          },
          "titleIncludes": {
            "title": "Title must include",
            "type": "array",
            "description": "Optional. Keep a job when its title contains any of these words or phrases. Whole words, any case: \"intern\" does not match \"International\". End a term with * to match word starts: \"engineer*\" matches \"Engineering\".",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Title must not include",
            "type": "array",
            "description": "Optional. Leave out a job when its title contains any of these, e.g. \"senior\", \"lead\", \"principal\". Same matching as above.",
            "items": {
              "type": "string"
            }
          },
          "descriptionIncludes": {
            "title": "Description must include",
            "type": "array",
            "description": "Optional. Keep a job when its description contains any of these, e.g. \"visa sponsorship\", \"python\". Reads each job's page, so with full details off it adds about a second per job.",
            "items": {
              "type": "string"
            }
          },
          "descriptionExcludes": {
            "title": "Description must not include",
            "type": "array",
            "description": "Optional. Leave out a job when its description contains any of these, e.g. \"security clearance\", \"no sponsorship\".",
            "items": {
              "type": "string"
            }
          },
          "includeCompany": {
            "title": "Add company details ($)",
            "type": "boolean",
            "description": "Add each employer's size band, industry, website, follower count, LinkedIn member count, headquarters, founded year and company type, read from its public LinkedIn company page (once per company per run). Jobs whose company page LinkedIn won't show are returned without them and not charged for them.",
            "default": false
          },
          "companySizes": {
            "title": "Company sizes ($)",
            "type": "array",
            "description": "Optional. Keep only employers in these LinkedIn size bands. Turns on company details.",
            "items": {
              "type": "string",
              "enum": [
                "1-10",
                "11-50",
                "51-200",
                "201-500",
                "501-1000",
                "1001-5000",
                "5001-10000",
                "10001+"
              ],
              "enumTitles": [
                "1-10 employees",
                "11-50",
                "51-200",
                "201-500",
                "501-1,000",
                "1,001-5,000",
                "5,001-10,000",
                "10,001+"
              ]
            }
          },
          "industries": {
            "title": "Company industries ($)",
            "type": "array",
            "description": "Optional. Keep only employers whose LinkedIn industry contains any of these words, e.g. \"software\", \"financial services\", \"hospitals\". Turns on company details.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}