{
  "data": {
    "id": "9dj6HmdpWtd6ifxXL",
    "actId": "KMflYVTHiIAXE6nKN",
    "userId": "LtmSKiC6dHmCowxCN",
    "startedAt": "2026-10-16T22:51:38.639Z",
    "finishedAt": "2026-10-16T22:51:47.937Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "API"
    },
    "stats": {
      "durationMillis": 9248,
      "runTimeSecs": 9.248,
      "computeUnits": 0.010275555555555555,
      "imageSizeBytes": 406979072
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "tag": "jl-20261016",
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Jobs Scraper | AI Enrichment\",\n  \"description\": \"Find LinkedIn jobs for job alerts, job boards, databases, and automations. Search by role and location; built-in deduplication helps avoid repeat deliveries.\\n\\n**Start small:** choose five results and a $0.10 Maximum cost per run. Keep First-run mode off for a basic search. Enable it only to try paid AI enrichment and English translation.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"firstRunMode\": {\n      \"title\": \"First-run mode\",\n      \"type\": \"boolean\",\n      \"description\": \"Try up to five jobs with Silver AI enrichment and translate selected fields to English. Paid extras apply. Keeps your search and filters; disables deduplication and analytics and omits descriptions. Turn off to use your own settings.\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false,\n      \"sectionCaption\": \"Try an enriched sample\",\n      \"sectionDescription\": \"Optional paid demo. Start with a $0.10 Maximum cost per run; the cap can reduce or stop output. The Pricing tab is authoritative for current charges.\"\n    },\n    \"keyword\": {\n      \"title\": \"Job keyword\",\n      \"type\": \"string\",\n      \"description\": \"Job title or skill, such as software engineer or Python. Leave empty to search all roles in your chosen location.\",\n      \"editor\": \"textfield\",\n      \"example\": \"frontend developer typescript\",\n      \"prefill\": \"software engineer\",\n      \"sectionCaption\": \"Search\",\n      \"sectionDescription\": \"Choose a role and location. Start with five results to check the fit.\"\n    },\n    \"location\": {\n      \"title\": \"Location\",\n      \"type\": \"string\",\n      \"description\": \"City, region, or country, such as London, Spain, or European Union. Leave empty for worldwide results.\",\n      \"editor\": \"textfield\",\n      \"example\": \"Germany\",\n      \"prefill\": \"United States\"\n    },\n    \"postedWithin\": {\n      \"title\": \"Posted within\",\n      \"type\": \"string\",\n      \"description\": \"Keep only jobs published inside this window. Use <code>any</code> for no date filter, or a duration — <code>1h</code>, <code>24h</code>, <code>3d</code>, <code>2w</code>, <code>6m</code>. Jobs the source gave no date for are dropped rather than guessed at.\",\n      \"editor\": \"textfield\",\n      \"pattern\": \"^(any|[0-9]+[hdwm])$\",\n      \"default\": \"24h\",\n      \"prefill\": \"7d\"\n    },\n    \"orderBy\": {\n      \"title\": \"Result order\",\n      \"type\": \"string\",\n      \"description\": \"Sort matching jobs by posting date. Jobs with unknown dates appear last.\",\n      \"editor\": \"select\",\n      \"default\": \"newest\",\n      \"prefill\": \"newest\",\n      \"enum\": [\n        \"newest\",\n        \"oldest\"\n      ],\n      \"enumTitles\": [\n        \"Newest first\",\n        \"Oldest first\"\n      ]\n    },\n    \"workArrangements\": {\n      \"title\": \"Work arrangements\",\n      \"type\": \"array\",\n      \"description\": \"Select remote, hybrid, on-site, or a combination. Leave empty for all. A matching search may return jobs whose individual arrangement is unknown; explicitly conflicting arrangements are excluded.\",\n      \"editor\": \"select\",\n      \"prefill\": [],\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"remote\",\n          \"hybrid\",\n          \"onsite\"\n        ],\n        \"enumTitles\": [\n          \"Remote\",\n          \"Hybrid\",\n          \"On-site\"\n        ]\n      },\n      \"uniqueItems\": true\n    },\n    \"linkedinSearch\": {\n      \"title\": \"Multiple searches (advanced)\",\n      \"type\": \"object\",\n      \"description\": \"Combine up to eight keyword/location searches and remove duplicate jobs. Leave empty to use the main search. Clear the main keyword and location when supplying multiple searches.\",\n      \"editor\": \"json\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"schemaVersion\"\n      ],\n      \"properties\": {\n        \"schemaVersion\": {\n          \"title\": \"Search format version\",\n          \"description\": \"Keep the supported search format version.\",\n          \"type\": \"string\",\n          \"default\": \"nomad-agent-linkedin-search-v2\",\n          \"enum\": [\n            \"nomad-agent-linkedin-search-v2\"\n          ]\n        },\n        \"searches\": {\n          \"title\": \"Searches\",\n          \"type\": \"array\",\n          \"description\": \"Up to eight role/location pairs. List order sets search priority; Result order sets the final output order.\",\n          \"maxItems\": 8,\n          \"items\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"keyword\",\n              \"location\"\n            ],\n            \"properties\": {\n              \"keyword\": {\n                \"title\": \"Keyword\",\n                \"description\": \"Job title or skill for this search.\",\n                \"type\": \"string\"\n              },\n              \"location\": {\n                \"title\": \"Location\",\n                \"description\": \"City, region, or country for this search.\",\n                \"type\": \"string\"\n              }\n            }\n          }\n        }\n      },\n      \"example\": {\n        \"schemaVersion\": \"nomad-agent-linkedin-search-v2\",\n        \"searches\": [\n          {\n            \"keyword\": \"frontend engineer\",\n            \"location\": \"Spain\"\n          },\n          {\n            \"keyword\": \"typescript developer\",\n            \"location\": \"European Union\"\n          }\n        ]\n      },\n      \"prefill\": {\n        \"schemaVersion\": \"nomad-agent-linkedin-search-v2\",\n        \"searches\": []\n      }\n    },\n    \"filters\": {\n      \"title\": \"Job filters (advanced)\",\n      \"type\": \"object\",\n      \"description\": \"Filter job fields with AND/OR rules. Filters use original-language values and any supported facts added by AI. Use the JSON example to start.\",\n      \"editor\": \"json\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"schemaVersion\": {\n          \"title\": \"Filter format version\",\n          \"description\": \"Keep the supported filter format version.\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"nomad-agent-job-filter-v1\"\n          ]\n        },\n        \"expression\": {\n          \"title\": \"Filter rules\",\n          \"description\": \"Combine supported job-field conditions using all, any, or not. See the JSON example.\",\n          \"type\": \"object\"\n        }\n      },\n      \"example\": {\n        \"schemaVersion\": \"nomad-agent-job-filter-v1\",\n        \"expression\": {\n          \"all\": [\n            {\n              \"field\": \"data.title\",\n              \"operator\": \"not_contains\",\n              \"value\": \"manager\"\n            },\n            {\n              \"field\": \"data.employment.workArrangements\",\n              \"operator\": \"overlaps\",\n              \"value\": [\n                \"remote\",\n                \"hybrid\"\n              ]\n            }\n          ]\n        }\n      },\n      \"prefill\": {\n        \"schemaVersion\": \"nomad-agent-job-filter-v1\",\n        \"expression\": {\n          \"field\": \"identity.source\",\n          \"operator\": \"eq\",\n          \"value\": \"linkedin\"\n        }\n      },\n      \"sectionCaption\": \"Advanced filters\",\n      \"sectionDescription\": \"Optional rules for job fields and source-confirmed locations. Use the JSON examples below.\"\n    },\n    \"strictGeography\": {\n      \"title\": \"Exact location filters\",\n      \"type\": \"object\",\n      \"description\": \"Require a country, region, or city confirmed by the source. All conditions must match the same location. Jobs with unknown locations are excluded by default; you can choose to stop the run instead.\",\n      \"editor\": \"json\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"schemaVersion\"\n      ],\n      \"properties\": {\n        \"schemaVersion\": {\n          \"title\": \"Location format version\",\n          \"description\": \"Keep the supported location-filter format version.\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"nomad-agent-linkedin-strict-geography-v1\"\n          ]\n        },\n        \"countries\": {\n          \"title\": \"Countries\",\n          \"description\": \"Two-letter country codes, such as ES or DE. Set at least one country, region, or city.\",\n          \"type\": \"array\",\n          \"maxItems\": 25,\n          \"uniqueItems\": true,\n          \"items\": {\n            \"type\": \"string\",\n            \"pattern\": \"^[A-Z]{2}$\"\n          }\n        },\n        \"regions\": {\n          \"title\": \"Regions\",\n          \"description\": \"Region names as shown by the source, ignoring letter case. Must match the same location as other conditions.\",\n          \"type\": \"array\",\n          \"maxItems\": 25,\n          \"uniqueItems\": true,\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 1\n          }\n        },\n        \"cities\": {\n          \"title\": \"Cities\",\n          \"description\": \"City names as shown by the source, ignoring letter case. Must match the same location as other conditions.\",\n          \"type\": \"array\",\n          \"maxItems\": 25,\n          \"uniqueItems\": true,\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 1\n          }\n        },\n        \"unknownPolicy\": {\n          \"title\": \"When location is unknown\",\n          \"description\": \"Exclude jobs without enough location evidence, or stop the run.\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"exclude\",\n            \"abort\"\n          ]\n        }\n      },\n      \"example\": {\n        \"schemaVersion\": \"nomad-agent-linkedin-strict-geography-v1\",\n        \"countries\": [\n          \"ES\"\n        ],\n        \"regions\": [\n          \"Catalonia\"\n        ],\n        \"cities\": [\n          \"Barcelona\"\n        ],\n        \"unknownPolicy\": \"exclude\"\n      }\n    },\n    \"companyProfileEnrichment\": {\n      \"title\": \"Add company details\",\n      \"type\": \"boolean\",\n      \"description\": \"Add available facts from the public company page linked to a job. No separate event charge. If the page is unavailable, keep the job without company details unless company filters apply.\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false,\n      \"sectionCaption\": \"Company details\",\n      \"sectionDescription\": \"Optional company information and filters. Checks up to 25 unique linked companies per run.\"\n    },\n    \"companyFilters\": {\n      \"title\": \"Company filters (advanced)\",\n      \"type\": \"object\",\n      \"description\": \"Filter by company facts. Requires Add company details. Unavailable or unverified profiles are excluded by default, even for missing-field checks; choose abort to stop the run instead.\",\n      \"editor\": \"json\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"schemaVersion\",\n        \"expression\"\n      ],\n      \"properties\": {\n        \"schemaVersion\": {\n          \"title\": \"Company filter version\",\n          \"description\": \"Keep the supported company-filter format version.\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"nomad-agent-linkedin-company-filter-v1\"\n          ]\n        },\n        \"expression\": {\n          \"title\": \"Company filter rules\",\n          \"description\": \"Combine supported company-field conditions using all, any, or not. See the JSON example.\",\n          \"type\": \"object\"\n        },\n        \"unknownPolicy\": {\n          \"title\": \"When a profile is unavailable\",\n          \"description\": \"Exclude the job, or stop the run. A verified profile with a missing field is still evaluated normally.\",\n          \"type\": \"string\",\n          \"enum\": [\n            \"exclude\",\n            \"abort\"\n          ]\n        }\n      },\n      \"example\": {\n        \"schemaVersion\": \"nomad-agent-linkedin-company-filter-v1\",\n        \"expression\": {\n          \"all\": [\n            {\n              \"field\": \"industry\",\n              \"operator\": \"contains\",\n              \"value\": \"software\"\n            },\n            {\n              \"field\": \"employeeCountRange.minimum\",\n              \"operator\": \"gte\",\n              \"value\": 50\n            }\n          ]\n        },\n        \"unknownPolicy\": \"exclude\"\n      }\n    },\n    \"aiEnrichment\": {\n      \"title\": \"AI enrichment\",\n      \"type\": \"object\",\n      \"description\": \"Fill supported missing fields from the description. Source facts are preserved. AI-filled fields can affect job filters. Failed enrichment leaves the base data unchanged. Paid extra; see Pricing. No API key needed.\",\n      \"editor\": \"schemaBased\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"enabled\",\n        \"accuracy\"\n      ],\n      \"properties\": {\n        \"enabled\": {\n          \"title\": \"Enable AI enrichment\",\n          \"description\": \"Fill supported missing job details from the description.\",\n          \"type\": \"boolean\",\n          \"editor\": \"checkbox\",\n          \"default\": false,\n          \"prefill\": false\n        },\n        \"accuracy\": {\n          \"title\": \"AI tier\",\n          \"description\": \"Silver is standard. Gold adds a second check. Choose Gold only when it appears in the current Pricing table.\",\n          \"type\": \"string\",\n          \"editor\": \"select\",\n          \"default\": \"silver\",\n          \"prefill\": \"silver\",\n          \"enum\": [\n            \"silver\",\n            \"gold\"\n          ],\n          \"enumTitles\": [\n            \"Silver — standard\",\n            \"Gold — additional validation\"\n          ]\n        }\n      },\n      \"default\": {\n        \"enabled\": false,\n        \"accuracy\": \"silver\"\n      },\n      \"prefill\": {\n        \"enabled\": false,\n        \"accuracy\": \"silver\"\n      },\n      \"example\": {\n        \"enabled\": true,\n        \"accuracy\": \"silver\"\n      },\n      \"sectionCaption\": \"AI and translation\",\n      \"sectionDescription\": \"Optional paid extras. First-run mode enables Silver AI and translation regardless of the settings below.\"\n    },\n    \"translateToEnglish\": {\n      \"title\": \"Translate selected fields to English\",\n      \"type\": \"boolean\",\n      \"description\": \"Translate selected fields, including titles, requirements, and benefits. Descriptions, company names, locations, skills, qualifications, certifications, programme names, IDs, URLs, source labels, and AI metadata stay unchanged. Paid extra; see Pricing. No translation key needed.\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeRaw\": {\n      \"title\": \"Include descriptions\",\n      \"type\": \"boolean\",\n      \"description\": \"Include full description text and HTML in raw. Turn off for smaller exports; AI enrichment still works. First-run mode omits descriptions.\",\n      \"editor\": \"checkbox\",\n      \"default\": true,\n      \"prefill\": true,\n      \"sectionCaption\": \"Results\",\n      \"sectionDescription\": \"Keep descriptions for full job context, or omit them for smaller exports. Sanitize HTML before displaying it.\"\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum results\",\n      \"type\": \"integer\",\n      \"description\": \"Return up to this many jobs, with a maximum of 1,000 per run. Set 0 to request 1,000. First-run mode caps results at five. Large searches take longer; filters and budget may reduce the count.\",\n      \"editor\": \"number\",\n      \"default\": 100,\n      \"prefill\": 10,\n      \"minimum\": 0,\n      \"maximum\": 1000,\n      \"sectionCaption\": \"Run settings\",\n      \"sectionDescription\": \"Control result count and repeat deliveries. Set Maximum cost per run in Apify to limit spending.\"\n    },\n    \"dedupe\": {\n      \"title\": \"Skip previously returned jobs\",\n      \"type\": \"object\",\n      \"description\": \"Avoid repeat jobs in recurring searches. An empty key keeps each search separate. A named key shares history across searches using that key within your account. Turn off for repeatable one-off searches.\",\n      \"editor\": \"schemaBased\",\n      \"default\": {\n        \"enabled\": true,\n        \"key\": \"default\"\n      },\n      \"prefill\": {\n        \"enabled\": true,\n        \"key\": \"\"\n      },\n      \"properties\": {\n        \"enabled\": {\n          \"title\": \"Skip repeat jobs\",\n          \"type\": \"boolean\",\n          \"description\": \"Skip jobs already delivered for this search or alert.\",\n          \"editor\": \"checkbox\",\n          \"default\": true,\n          \"prefill\": true\n        },\n        \"key\": {\n          \"title\": \"Alert key (optional)\",\n          \"type\": \"string\",\n          \"description\": \"Leave empty for separate history per search. Reuse a named key to share history across searches within your account. Use different keys for separate alerts. This is not a secret.\",\n          \"editor\": \"textfield\",\n          \"default\": \"default\",\n          \"prefill\": \"\",\n          \"maxLength\": 256\n        }\n      },\n      \"required\": [\n        \"enabled\"\n      ],\n      \"additionalProperties\": false\n    },\n    \"analyticsEnabled\": {\n      \"title\": \"Share anonymous run statistics\",\n      \"type\": \"boolean\",\n      \"description\": \"Optionally share aggregate run statistics to help improve reliability. Excludes account and run IDs, searches, job data, URLs, credentials, and persistent caller identifiers.\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false,\n      \"sectionCaption\": \"Privacy\",\n      \"sectionDescription\": \"Anonymous statistics are optional and off by default.\"\n    },\n    \"schemaVersion\": {\n      \"title\": \"Input format version\",\n      \"type\": \"string\",\n      \"description\": \"Keep this value unchanged. It identifies the input format expected by the Actor.\",\n      \"editor\": \"select\",\n      \"default\": \"nomad-agent-job-search-input-v1\",\n      \"prefill\": \"nomad-agent-job-search-input-v1\",\n      \"enum\": [\n        \"nomad-agent-job-search-input-v1\"\n      ],\n      \"enumTitles\": [\n        \"v1 — current input format\"\n      ],\n      \"sectionCaption\": \"For API users\",\n      \"sectionDescription\": \"Keep the supported input format version.\"\n    }\n  },\n  \"required\": [\n    \"schemaVersion\"\n  ],\n  \"additionalProperties\": false\n}",
    "readme": "# LinkedIn Jobs Scraper (No Cookies) + AI Enrichment\n\n<!-- hero -->\n$0.3/1K jobs | Search public LinkedIn jobs by role and location with full descriptions and original job links. No cookies, login or API key. Skips repeat jobs for alerts and job boards; optional AI enrichment and English translation. Independent, unofficial tool. Not affiliated with or endorsed by LinkedIn.\n<!-- /hero -->\n\n## LinkedIn Jobs Bulk Search Scraper\n\nOur scraper searches public LinkedIn job postings by role and location and lets you filter by posting age, work arrangement, exact location and company facts. Every job comes in one consistent format with the original LinkedIn link and, by default, the complete description in text and HTML. It is ideal for job alerts, job boards, spreadsheets and recruiting pipelines.\n\n- Want research jobs (PhD, postdoc, faculty)? Our [EURAXESS Jobs Scraper](https://apify.com/jobatlas/euraxess-enrich-translate-normalize-scraper) reads a stored, hourly-refreshed collection of recent EURAXESS offers and adds deadlines and funding programme. It covers EURAXESS only.\n- Want startup jobs? Our [Y Combinator Jobs Scraper](https://apify.com/jobatlas/ycombinator-enrich-translate-normalize-scraper) reads Y Combinator's job listings. It covers Y Combinator companies only.\n- Browse all Job Atlas job-data Actors: https://apify.com/jobatlas\n\n### Key Benefits\n\n- No cookies or login: you never share a LinkedIn session or account, so there is nothing to paste and no account at risk.\n- Low pricing: $0.30 per 1,000 jobs, with no start fee. Platform usage is included in that price.\n- Full details: the complete description (text and HTML) and the original LinkedIn link on every job, plus company, location, seniority and applicant-count fields when LinkedIn shows them.\n- No repeats across runs: schedule the same search and jobs already delivered to you are skipped.\n- Optional AI enrichment and English translation, with no AI or translation key to bring. Both are off by default and billed per job (see Pricing below).\n- LinkedIn can limit request rates. A run then ends early with fewer jobs than requested (`RUN-SUMMARY` status `partial`), and you pay only for returned jobs.\n\n## How It Works\n\n1. Provide your search:\n   - (optional) Job keyword (e.g., `software engineer`, `Python`). Leave it empty to search all roles in a location.\n   - (optional) Location (e.g., `United States`, `Spain`, `European Union`). City, region or country. Leave it empty for worldwide results.\n   - (optional) Posted within (e.g., `7d`). Use `any`, or a duration such as `1h`, `24h`, `3d`, `2w` or `6m`. The default is `24h`. When a date filter is on, jobs without a posting date are dropped.\n   - (optional) Work arrangements: remote, hybrid, on-site, or any mix. A matching search can still return jobs whose own arrangement is unknown; jobs that clearly conflict are excluded.\n2. Set **Maximum results** (`maxItems`). The default is `100` and the limit is 1,000 per run; `0` requests 1,000. Start with 10 to check the fit.\n3. Run the Actor and open the dataset. `RUN-SUMMARY` in the run's key-value store shows how many jobs were delivered and whether a retry is suggested.\n\nRun the same search again and you get only postings you have not received yet; set `dedupe.enabled` to `false` to see everything again. If you omit `dedupe` in an API call, the default key `default` applies and all your searches share one history; pass `\"key\": \"\"` for per-search history.\n\nMore settings:\n\n- `orderBy` - Newest first (default) or oldest first. Jobs with an unknown date come last.\n- `includeRaw` - Keep the full description text and HTML in `raw`. Default is on. Turn it off for smaller exports; AI enrichment still works.\n- `dedupe` - Skip jobs already delivered. Default is on. Leave `key` empty and each search keeps its own history; reuse one named key to share history across searches in your account, and use different keys for separate alerts. History is bounded, so it is not a permanent archive.\n- `linkedinSearch` (advanced) - Combine up to eight keyword and location searches in one run and remove duplicate jobs. Clear the main keyword and location when you use it.\n- `filters` (advanced) - Keep jobs by AND/OR rules on job fields, such as a title that does not contain `manager`. The input form's JSON editor has an example.\n- `strictGeography` (advanced) - Require a country, region or city that LinkedIn confirms. Jobs with unknown locations are excluded by default, or you can stop the run instead.\n- `companyProfileEnrichment` - Add facts from each job's public company page, for up to 25 unique companies per run. No separate charge. `companyFilters` (advanced) needs this switched on.\n\nTry the extras safely: switch on **First-run mode** to get up to five jobs with Silver AI enrichment and English translation. It keeps your search and filters, turns off repeat suppression and analytics, and leaves out descriptions. Five jobs cost about $0.05 (5 x $0.0103 = $0.0515), so a $0.10 Maximum cost per run is enough. Turn it off again to use your own settings.\n\n## Optional extras and pricing\n\nYou pay per returned job. AI enrichment and English translation are separate per-job events and are off by default. The **Pricing** tab is authoritative for current rates and scheduled changes.\n\n| Feature | Billed event | Price per event | Price per 1,000 jobs | What it adds |\n|---|---|---:|---:|---|\n| Job results | `result` | $0.0003 | $0.30 | Structured job records and LinkedIn links |\n| Silver AI enrichment | `position-enrichment` | $0.004 | +$4.00 | Missing supported facts extracted from the description |\n| Gold AI enrichment | `position-enrichment-gold` | $0.010 | +$10.00 | Silver plus a second check |\n| English translation | `translation` | $0.006 | +$6.00 | Selected short display fields in English |\n| Company details | none | $0 | no extra charge | Facts from the linked public company page |\n\nFor example, 1,000 jobs with Silver enrichment and translation cost $0.30 + $4.00 + $6.00 = $10.30. A failed AI enrichment is not charged. Set Apify's Maximum cost per run before large searches; the cap can end a run early.\n\nAI enrichment fills only supported fields that are missing and never overwrites source facts. Silver is the standard tier. AI can make mistakes, so review important facts. English translation covers selected fields such as titles, requirements and benefits. Full descriptions, company names, locations, skills and URLs stay in their original form.\n\nGood to know:\n\n- LinkedIn can limit the request rate during a run. The run then ends early with the jobs it has already fetched, and `RUN-SUMMARY` shows status `partial` with a suggested retry delay. Jobs whose details could not be fetched are held for a later retry and are not charged. Wait the suggested time, then run again with the same input; repeat suppression skips the jobs you already received.\n- Results depend on the public LinkedIn postings available. Filters, source restrictions and your budget can reduce the count. Strict location and company filters exclude jobs with missing evidence.\n- Fields LinkedIn does not publish stay `null`. The Actor does not fill them by guessing.\n\n### Data You'll Receive\n\n- Job details: title, complete description (text and HTML), LinkedIn job ID and link, posting date, seniority level, industry, employment type when shown.\n- Company: name, LinkedIn company ID and link; optionally more facts from the company page.\n- Location: the label LinkedIn shows plus city, region, country code and coordinates when available.\n- Application: applicant-count snapshot, direct-apply flag and reference number when LinkedIn shows them.\n- Salary, required skills and hiring contacts: only when the posting provides them. Otherwise the field is `null`.\n- AI status: the `llm` block records whether enrichment ran and which fields it filled.\n\nThe JSON format is `nomad-agent-job-v1` with six roots: `schemaVersion`, `identity`, `data`, `custom`, `llm` and `raw`. `null` means unknown; `[]` means confirmed empty. Sanitize source HTML before you display it.\n\n### Sample output data\n\nHere is an example job from this Actor, observed on October 16, 2026. Empty fields are left out and long text is cut for length. Values change with the source, and a sample is not a promise that the job is still open.\n\n```json\n{\n  \"schemaVersion\": \"nomad-agent-job-v1\",\n  \"identity\": {\n    \"source\": \"linkedin\",\n    \"externalId\": \"4471641260\",\n    \"url\": \"https://www.linkedin.com/jobs/view/software-development-engineer-iii-at-clear-4471641260\"\n  },\n  \"data\": {\n    \"title\": \"Software Development Engineer III\",\n    \"company\": {\n      \"name\": \"CLEAR\",\n      \"sourceId\": \"961661\",\n      \"url\": \"https://www.linkedin.com/company/clear-by-alclear-llc\"\n    },\n    \"classification\": {\n      \"industries\": [\n        \"Consumer Services\"\n      ]\n    },\n    \"locations\": [\n      {\n        \"raw\": \"New York, NY\",\n        \"countryName\": \"United States\",\n        \"countryCode\": \"US\",\n        \"city\": \"New York\",\n        \"region\": \"NY\",\n        \"latitude\": 40.713047,\n        \"longitude\": -74.00723\n      }\n    ],\n    \"employment\": {\n      \"workSchedules\": [\n        \"full_time\"\n      ]\n    },\n    \"application\": {\n      \"postedAt\": \"2026-10-16T09:41:21.000Z\",\n      \"deadline\": \"2027-04-22T17:59:16.000Z\",\n      \"referenceNumber\": \"8100208\",\n      \"referenceNumberIssuer\": \"CLEAR\",\n      \"applicantSnapshot\": {\n        \"count\": 25,\n        \"raw\": \"Be among the first 25 applicants\",\n        \"capturedAt\": \"2026-10-16T16:48:13.869319Z\"\n      },\n      \"directApply\": true,\n      \"applyMethodRaw\": \"Apply\",\n      \"availability\": {\n        \"status\": \"observed_available\",\n        \"observedAt\": \"2026-10-16T16:48:06.220427Z\"\n      }\n    },\n    \"seniority\": {\n      \"raw\": [\n        \"Mid-Senior level\"\n      ],\n      \"levels\": [\n        \"mid\",\n        \"senior\"\n      ]\n    },\n    \"requirements\": {\n      \"experience\": [\n        {\n          \"minimumYears\": 6\n        }\n      ]\n    }\n  },\n  \"llm\": {\n    \"status\": \"not_requested\"\n  },\n  \"raw\": {\n    \"description\": \"CLEAR is building THE secure identity company of the future. Our mission is to make experiences safer ...\"\n  }\n}\n```\n\n## LinkedIn Jobs API\n\nResults are stored in a dataset that you can export as CSV, JSON or Excel, or read on demand through the Apify API. Maintained API, MCP, n8n, Make, Python and Agent Skill assets are available in the [integration guide](https://github.com/Exdenta/jobatlas/blob/main/docs/linkedin.md). Airtable is a post-run destination projection, not a runnable template, and no Zapier workflow is claimed. Having an asset does not prove a hosted connection or a write to your destination.\n\n```python\nfrom decimal import Decimal\nfrom apify_client import ApifyClient\n\nclient = ApifyClient(\"<YOUR_APIFY_TOKEN>\")\nrun = client.actor(\n    \"jobatlas/linkedin-enrich-translate-normalize-scraper\"\n).call(run_input={\n    \"schemaVersion\": \"nomad-agent-job-search-input-v1\",\n    \"keyword\": \"software engineer\",\n    \"location\": \"United States\",\n    \"postedWithin\": \"7d\",\n    \"maxItems\": 10,\n    \"includeRaw\": True,\n    \"aiEnrichment\": {\"enabled\": False, \"accuracy\": \"silver\"},\n    \"translateToEnglish\": False,\n    \"companyProfileEnrichment\": False,\n    \"analyticsEnabled\": False,\n    \"dedupe\": {\"enabled\": True, \"key\": \"\"},\n}, build=\"latest\", max_items=10, max_total_charge_usd=Decimal(\"0.10\"))\n\nif run[\"status\"] != \"SUCCEEDED\" or not run.get(\"buildId\") or not run.get(\"buildNumber\"):\n    raise RuntimeError(\"Actor run failed or omitted its resolved build identity\")\n\nfor job in client.dataset(run[\"defaultDatasetId\"]).iterate_items():\n    print(job[\"data\"][\"title\"], job[\"identity\"][\"url\"])\n```\n\n### Support and Feedback\n\nWe improve these scrapers from your feedback. If something breaks or you need a filter:\n\n- Open an issue on the Actor's Issues tab. For a correction or removal request, include the job URL or ID and leave out private information.\n- If this Actor saved you time, a short review on the Store helps other users find it.\n\n## Run evidence\n\n- Sample record: a real job from build 1.0.10, run `6ITwglMxz7yooffcq`, October 16, 2026. That run asked for 10 jobs and returned 3, with `RUN-SUMMARY` status `partial` because LinkedIn limited the request rate, as described under Good to know.\n- Build identity: the example above follows `latest`. Check the [current default build API](https://api.apify.com/v2/acts/jobatlas~linkedin-enrich-translate-normalize-scraper/builds/default) for the default build number and immutable ID, and record the build ID and number that your run returns. A `1.0.x` check alone does not prove compatibility; follow the selected integration template's compatibility guide.\n- Reading a run: inspect the dataset together with `RUN-SUMMARY` and each job's `llm.status`. A successful status alone does not show complete coverage. Restrictive filters or repeat suppression can produce zero results.\n- Agent setup: the [setup skill](https://github.com/Exdenta/jobatlas/blob/main/.agents/skills/public-apify-actors/SKILL.md) and the [public setup guide](https://github.com/Exdenta/jobatlas/blob/main/docs/public-actors-setup.md) cover the documented API example.\n\n## Product guides and related tools\n\n- [Product overview and public links](https://jobatlas.dev/actors/directory/normalized-jobs#jobatlas-linkedin-enrich-translate-normalize-scraper)\n- [Job Atlas job-data tools](https://jobatlas.dev/actors)\n\n## Job Atlas\n\nExplore the Job Atlas job-data and matching Actors.\n\n- [LinkedIn jobs](https://apify.com/jobatlas/linkedin-enrich-translate-normalize-scraper)\n- [EURAXESS jobs](https://apify.com/jobatlas/euraxess-enrich-translate-normalize-scraper)\n- [Y Combinator jobs](https://apify.com/jobatlas/ycombinator-enrich-translate-normalize-scraper)\n- [AI job fit scorer](https://apify.com/jobatlas/ai-job-fit-scorer)\n\n[Product guide](https://jobatlas.dev/actors/linkedin) | [Source and client examples](https://github.com/Exdenta/jobatlas) | [Setup skill](https://github.com/Exdenta/jobatlas/blob/main/.agents/skills/public-apify-actors/SKILL.md) | [Setup guide](https://github.com/Exdenta/jobatlas/blob/main/docs/public-actors-setup.md)\n\n* * *\n\n**Independent tool.** We built and run this Actor ourselves. LinkedIn does not operate, sponsor or endorse it, and its name is used only to say which site the data comes from. Contact the Actor creator through the Apify Issues tab for help or privacy requests.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-enrich-translate-normalize-scraper",
      "title": "LinkedIn Jobs Scraper (No Cookies) + AI Enrichment",
      "description": "$0.3/1K jobs | Search public LinkedIn jobs by role and location with full descriptions and original job links. No cookies, login or API key. Skips repeat jobs for alerts and job boards; optional AI enrichment and English translation.",
      "seoTitle": "LinkedIn Jobs Scraper (No Cookies) with AI Enrichment",
      "seoDescription": "Scrape public LinkedIn jobs by role and location with full descriptions and source links. No cookies or login. $0.30 per 1,000 jobs, repeat jobs skipped, optional AI enrichment.",
      "version": "1.0",
      "buildTag": "latest",
      "defaultMemoryMbytes": 2048,
      "minMemoryMbytes": 2048,
      "maxMemoryMbytes": 2048,
      "environmentVariables": {
        "DEEPL_API_KEY": "@linkedinNormalizedDeepLKey",
        "OPENROUTER_API_KEY": "@linkedinPositionLlmOpenRouterKey",
        "NOMAD_OPENROUTER_APP_URL": "https://apify.com/nomad-agent/linkedin-enrich-translate-normalize-scraper",
        "NOMAD_OPENROUTER_APP_TITLE": "LinkedIn Jobs Scraper | AI Enrichment",
        "NOMAD_POSITION_LLM_SILVER_MODEL": "openai/gpt-5.6-luna",
        "NOMAD_POSITION_LLM_SILVER_ROUTING_MANIFEST": "{\"schemaVersion\":\"nomad-openrouter-routing-manifest-v2\",\"policyVersion\":\"linkedin-position-silver-luna-routing-2026-09-06-v1\",\"model\":\"openai/gpt-5.6-luna\",\"catalogModelId\":\"openai/gpt-5.6-luna\",\"providerOrder\":[\"openai\"],\"providers\":{\"openai\":{\"legalName\":\"OpenAI\",\"endpoint\":\"openrouter-provider:openai\",\"processingRegion\":\"global-no-residency-guarantee\",\"regionResidencyGuaranteed\":false,\"zdrRequired\":false,\"privacyPolicyUrl\":\"https://openai.com/policies/privacy-policy/\",\"auditedPromptPrice\":\"0.20\",\"auditedCompletionPrice\":\"1.20\"}},\"checkedAt\":\"2026-08-24T08:24:03Z\",\"disclosure\":{\"descriptionTextOnly\":true,\"zeroDataRetentionRequired\":false,\"dataCollection\":\"deny\",\"retention\":\"Silver sends the description to the same owner-approved OpenAI endpoint used by Gold for grouped extraction. OpenRouter prompt logging remains disabled and provider data collection is denied; zero data retention and EU residency are not guaranteed. The Actor owner retains sanitized extracted facts in its cache.\",\"euDataResidencyGuaranteed\":false,\"reviewedBy\":\"Codex release review; provider policy inherited from the owner-approved Gold route\",\"references\":[\"https://openrouter.ai/api/v1/models/openai/gpt-5.6-luna/endpoints\",\"https://openrouter.ai/docs/guides/privacy/data-collection\",\"https://openrouter.ai/docs/guides/routing/provider-selection\",\"https://openai.com/policies/privacy-policy/\"]},\"maxPrice\":{\"prompt\":\"0.40\",\"completion\":\"2.40\"}}",
        "NOMAD_POSITION_LLM_GOLD_MODEL": "openai/gpt-5.6-luna",
        "NOMAD_POSITION_LLM_GOLD_ROUTING_MANIFEST": "{\"schemaVersion\":\"nomad-openrouter-routing-manifest-v2\",\"policyVersion\":\"linkedin-position-gold-luna-cascade-routing-2026-08-24-v2\",\"model\":\"openai/gpt-5.6-luna\",\"catalogModelId\":\"openai/gpt-5.6-luna\",\"providerOrder\":[\"openai\"],\"providers\":{\"openai\":{\"legalName\":\"OpenAI\",\"endpoint\":\"openrouter-provider:openai\",\"processingRegion\":\"global-no-residency-guarantee\",\"regionResidencyGuaranteed\":false,\"zdrRequired\":false,\"privacyPolicyUrl\":\"https://openai.com/policies/privacy-policy/\",\"auditedPromptPrice\":\"0.20\",\"auditedCompletionPrice\":\"1.20\"}},\"checkedAt\":\"2026-08-24T08:24:03Z\",\"disclosure\":{\"descriptionTextOnly\":true,\"zeroDataRetentionRequired\":false,\"dataCollection\":\"deny\",\"retention\":\"Gold sends the description to the selected OpenAI endpoint for grouped extraction and a corrections-only verifier. OpenRouter prompt logging remains disabled and provider data collection is denied, but the selected endpoint does not provide a zero-data-retention guarantee; the Actor owner separately retains sanitized extracted facts in its cache.\",\"euDataResidencyGuaranteed\":false,\"reviewedBy\":\"nomad-agent Actor owner\",\"references\":[\"https://openrouter.ai/api/v1/models/openai/gpt-5.6-luna/endpoints\",\"https://openrouter.ai/docs/guides/privacy/data-collection\",\"https://openrouter.ai/docs/guides/routing/provider-selection\",\"https://openai.com/policies/privacy-policy/\"]},\"maxPrice\":{\"prompt\":\"0.40\",\"completion\":\"2.40\"}}",
        "NOMAD_POSITION_LLM_CONCURRENCY": "4",
        "NOMAD_POSITION_LLM_MAX_ROWS": "50",
        "NOMAD_POSITION_LLM_MAX_TOKENS": "1200",
        "NOMAD_POSITION_LLM_OWNER_DAILY_USD_LIMIT": "5.00",
        "NOMAD_SHARED_KVS_TOKEN": "@nomadSharedKvsToken",
        "NOMAD_DELIVERY_LEDGER_URL": "https://api.oinkjobsearch.com/api/v1/actor-gateway",
        "NOMAD_DELIVERY_LEDGER_TOKEN": "@nomadActorGatewayDeliveryToken",
        "NOMAD_FLEET_CONTROL_URL": "https://api.oinkjobsearch.com/api/v1/actor-gateway",
        "NOMAD_FLEET_CONTROL_TOKEN": "@nomadActorGatewayFleetToken",
        "NOMAD_PROVIDER_SPEND_TOKEN": "@nomadActorGatewaySpendToken",
        "NOMAD_CACHE_GATEWAY_URL": "https://api.oinkjobsearch.com/api/v1/actor-gateway",
        "NOMAD_CACHE_GATEWAY_TOKEN": "@nomadActorGatewayCacheToken",
        "NOMAD_CACHE_GATEWAY_ACTOR_NAME": "nomad-agent/linkedin-enrich-translate-normalize-scraper",
        "NOMAD_DELIVERY_KVS_ID": "f2aeklJH2nufKbO46",
        "NOMAD_ACTOR_ANALYTICS_URL": "https://api.oinkjobsearch.com/api/v1/actor-analytics",
        "NOMAD_ACTOR_ANALYTICS_TOKEN": "@nomadActorAnalyticsToken",
        "HRYU_POSITION_INVENTORY_BASE_URL": "https://api.oinkjobsearch.com",
        "HRYU_POSITION_INVENTORY_QUERY_TOKEN": "@hryuPositionInventoryQueryToken",
        "HRYU_POSITION_INVENTORY_LIVE_TOKEN": "@hryuPositionInventoryLiveToken"
      },
      "categories": [
        "JOBS"
      ],
      "meta": {
        "templateId": "python-start"
      },
      "input": {
        "title": "LinkedIn Jobs Scraper | AI Enrichment",
        "description": "Find LinkedIn jobs for job alerts, job boards, databases, and automations. Search by role and location; built-in deduplication helps avoid repeat deliveries.\n\n**Start small:** choose five results and a $0.10 Maximum cost per run. Keep First-run mode off for a basic search. Enable it only to try paid AI enrichment and English translation.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "firstRunMode": {
            "title": "First-run mode",
            "type": "boolean",
            "description": "Try up to five jobs with Silver AI enrichment and translate selected fields to English. Paid extras apply. Keeps your search and filters; disables deduplication and analytics and omits descriptions. Turn off to use your own settings.",
            "editor": "checkbox",
            "default": false,
            "prefill": false,
            "sectionCaption": "Try an enriched sample",
            "sectionDescription": "Optional paid demo. Start with a $0.10 Maximum cost per run; the cap can reduce or stop output. The Pricing tab is authoritative for current charges."
          },
          "keyword": {
            "title": "Job keyword",
            "type": "string",
            "description": "Job title or skill, such as software engineer or Python. Leave empty to search all roles in your chosen location.",
            "editor": "textfield",
            "example": "frontend developer typescript",
            "prefill": "software engineer",
            "sectionCaption": "Search",
            "sectionDescription": "Choose a role and location. Start with five results to check the fit."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region, or country, such as London, Spain, or European Union. Leave empty for worldwide results.",
            "editor": "textfield",
            "example": "Germany",
            "prefill": "United States"
          },
          "postedWithin": {
            "title": "Posted within",
            "type": "string",
            "description": "Keep only jobs published inside this window. Use <code>any</code> for no date filter, or a duration — <code>1h</code>, <code>24h</code>, <code>3d</code>, <code>2w</code>, <code>6m</code>. Jobs the source gave no date for are dropped rather than guessed at.",
            "editor": "textfield",
            "pattern": "^(any|[0-9]+[hdwm])$",
            "default": "24h",
            "prefill": "7d"
          },
          "orderBy": {
            "title": "Result order",
            "type": "string",
            "description": "Sort matching jobs by posting date. Jobs with unknown dates appear last.",
            "editor": "select",
            "default": "newest",
            "prefill": "newest",
            "enum": [
              "newest",
              "oldest"
            ],
            "enumTitles": [
              "Newest first",
              "Oldest first"
            ]
          },
          "workArrangements": {
            "title": "Work arrangements",
            "type": "array",
            "description": "Select remote, hybrid, on-site, or a combination. Leave empty for all. A matching search may return jobs whose individual arrangement is unknown; explicitly conflicting arrangements are excluded.",
            "editor": "select",
            "prefill": [],
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            },
            "uniqueItems": true
          },
          "linkedinSearch": {
            "title": "Multiple searches (advanced)",
            "type": "object",
            "description": "Combine up to eight keyword/location searches and remove duplicate jobs. Leave empty to use the main search. Clear the main keyword and location when supplying multiple searches.",
            "editor": "json",
            "additionalProperties": false,
            "required": [
              "schemaVersion"
            ],
            "properties": {
              "schemaVersion": {
                "title": "Search format version",
                "description": "Keep the supported search format version.",
                "type": "string",
                "default": "nomad-agent-linkedin-search-v2",
                "enum": [
                  "nomad-agent-linkedin-search-v2"
                ]
              },
              "searches": {
                "title": "Searches",
                "type": "array",
                "description": "Up to eight role/location pairs. List order sets search priority; Result order sets the final output order.",
                "maxItems": 8,
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "keyword",
                    "location"
                  ],
                  "properties": {
                    "keyword": {
                      "title": "Keyword",
                      "description": "Job title or skill for this search.",
                      "type": "string"
                    },
                    "location": {
                      "title": "Location",
                      "description": "City, region, or country for this search.",
                      "type": "string"
                    }
                  }
                }
              }
            },
            "example": {
              "schemaVersion": "nomad-agent-linkedin-search-v2",
              "searches": [
                {
                  "keyword": "frontend engineer",
                  "location": "Spain"
                },
                {
                  "keyword": "typescript developer",
                  "location": "European Union"
                }
              ]
            },
            "prefill": {
              "schemaVersion": "nomad-agent-linkedin-search-v2",
              "searches": []
            }
          },
          "filters": {
            "title": "Job filters (advanced)",
            "type": "object",
            "description": "Filter job fields with AND/OR rules. Filters use original-language values and any supported facts added by AI. Use the JSON example to start.",
            "editor": "json",
            "additionalProperties": false,
            "properties": {
              "schemaVersion": {
                "title": "Filter format version",
                "description": "Keep the supported filter format version.",
                "type": "string",
                "enum": [
                  "nomad-agent-job-filter-v1"
                ]
              },
              "expression": {
                "title": "Filter rules",
                "description": "Combine supported job-field conditions using all, any, or not. See the JSON example.",
                "type": "object"
              }
            },
            "example": {
              "schemaVersion": "nomad-agent-job-filter-v1",
              "expression": {
                "all": [
                  {
                    "field": "data.title",
                    "operator": "not_contains",
                    "value": "manager"
                  },
                  {
                    "field": "data.employment.workArrangements",
                    "operator": "overlaps",
                    "value": [
                      "remote",
                      "hybrid"
                    ]
                  }
                ]
              }
            },
            "prefill": {
              "schemaVersion": "nomad-agent-job-filter-v1",
              "expression": {
                "field": "identity.source",
                "operator": "eq",
                "value": "linkedin"
              }
            },
            "sectionCaption": "Advanced filters",
            "sectionDescription": "Optional rules for job fields and source-confirmed locations. Use the JSON examples below."
          },
          "strictGeography": {
            "title": "Exact location filters",
            "type": "object",
            "description": "Require a country, region, or city confirmed by the source. All conditions must match the same location. Jobs with unknown locations are excluded by default; you can choose to stop the run instead.",
            "editor": "json",
            "additionalProperties": false,
            "required": [
              "schemaVersion"
            ],
            "properties": {
              "schemaVersion": {
                "title": "Location format version",
                "description": "Keep the supported location-filter format version.",
                "type": "string",
                "enum": [
                  "nomad-agent-linkedin-strict-geography-v1"
                ]
              },
              "countries": {
                "title": "Countries",
                "description": "Two-letter country codes, such as ES or DE. Set at least one country, region, or city.",
                "type": "array",
                "maxItems": 25,
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "pattern": "^[A-Z]{2}$"
                }
              },
              "regions": {
                "title": "Regions",
                "description": "Region names as shown by the source, ignoring letter case. Must match the same location as other conditions.",
                "type": "array",
                "maxItems": 25,
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "cities": {
                "title": "Cities",
                "description": "City names as shown by the source, ignoring letter case. Must match the same location as other conditions.",
                "type": "array",
                "maxItems": 25,
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "unknownPolicy": {
                "title": "When location is unknown",
                "description": "Exclude jobs without enough location evidence, or stop the run.",
                "type": "string",
                "enum": [
                  "exclude",
                  "abort"
                ]
              }
            },
            "example": {
              "schemaVersion": "nomad-agent-linkedin-strict-geography-v1",
              "countries": [
                "ES"
              ],
              "regions": [
                "Catalonia"
              ],
              "cities": [
                "Barcelona"
              ],
              "unknownPolicy": "exclude"
            }
          },
          "companyProfileEnrichment": {
            "title": "Add company details",
            "type": "boolean",
            "description": "Add available facts from the public company page linked to a job. No separate event charge. If the page is unavailable, keep the job without company details unless company filters apply.",
            "editor": "checkbox",
            "default": false,
            "prefill": false,
            "sectionCaption": "Company details",
            "sectionDescription": "Optional company information and filters. Checks up to 25 unique linked companies per run."
          },
          "companyFilters": {
            "title": "Company filters (advanced)",
            "type": "object",
            "description": "Filter by company facts. Requires Add company details. Unavailable or unverified profiles are excluded by default, even for missing-field checks; choose abort to stop the run instead.",
            "editor": "json",
            "additionalProperties": false,
            "required": [
              "schemaVersion",
              "expression"
            ],
            "properties": {
              "schemaVersion": {
                "title": "Company filter version",
                "description": "Keep the supported company-filter format version.",
                "type": "string",
                "enum": [
                  "nomad-agent-linkedin-company-filter-v1"
                ]
              },
              "expression": {
                "title": "Company filter rules",
                "description": "Combine supported company-field conditions using all, any, or not. See the JSON example.",
                "type": "object"
              },
              "unknownPolicy": {
                "title": "When a profile is unavailable",
                "description": "Exclude the job, or stop the run. A verified profile with a missing field is still evaluated normally.",
                "type": "string",
                "enum": [
                  "exclude",
                  "abort"
                ]
              }
            },
            "example": {
              "schemaVersion": "nomad-agent-linkedin-company-filter-v1",
              "expression": {
                "all": [
                  {
                    "field": "industry",
                    "operator": "contains",
                    "value": "software"
                  },
                  {
                    "field": "employeeCountRange.minimum",
                    "operator": "gte",
                    "value": 50
                  }
                ]
              },
              "unknownPolicy": "exclude"
            }
          },
          "aiEnrichment": {
            "title": "AI enrichment",
            "type": "object",
            "description": "Fill supported missing fields from the description. Source facts are preserved. AI-filled fields can affect job filters. Failed enrichment leaves the base data unchanged. Paid extra; see Pricing. No API key needed.",
            "editor": "schemaBased",
            "additionalProperties": false,
            "required": [
              "enabled",
              "accuracy"
            ],
            "properties": {
              "enabled": {
                "title": "Enable AI enrichment",
                "description": "Fill supported missing job details from the description.",
                "type": "boolean",
                "editor": "checkbox",
                "default": false,
                "prefill": false
              },
              "accuracy": {
                "title": "AI tier",
                "description": "Silver is standard. Gold adds a second check. Choose Gold only when it appears in the current Pricing table.",
                "type": "string",
                "editor": "select",
                "default": "silver",
                "prefill": "silver",
                "enum": [
                  "silver",
                  "gold"
                ],
                "enumTitles": [
                  "Silver — standard",
                  "Gold — additional validation"
                ]
              }
            },
            "default": {
              "enabled": false,
              "accuracy": "silver"
            },
            "prefill": {
              "enabled": false,
              "accuracy": "silver"
            },
            "example": {
              "enabled": true,
              "accuracy": "silver"
            },
            "sectionCaption": "AI and translation",
            "sectionDescription": "Optional paid extras. First-run mode enables Silver AI and translation regardless of the settings below."
          },
          "translateToEnglish": {
            "title": "Translate selected fields to English",
            "type": "boolean",
            "description": "Translate selected fields, including titles, requirements, and benefits. Descriptions, company names, locations, skills, qualifications, certifications, programme names, IDs, URLs, source labels, and AI metadata stay unchanged. Paid extra; see Pricing. No translation key needed.",
            "editor": "checkbox",
            "default": false,
            "prefill": false
          },
          "includeRaw": {
            "title": "Include descriptions",
            "type": "boolean",
            "description": "Include full description text and HTML in raw. Turn off for smaller exports; AI enrichment still works. First-run mode omits descriptions.",
            "editor": "checkbox",
            "default": true,
            "prefill": true,
            "sectionCaption": "Results",
            "sectionDescription": "Keep descriptions for full job context, or omit them for smaller exports. Sanitize HTML before displaying it."
          },
          "maxItems": {
            "title": "Maximum results",
            "type": "integer",
            "description": "Return up to this many jobs, with a maximum of 1,000 per run. Set 0 to request 1,000. First-run mode caps results at five. Large searches take longer; filters and budget may reduce the count.",
            "editor": "number",
            "default": 100,
            "prefill": 10,
            "minimum": 0,
            "maximum": 1000,
            "sectionCaption": "Run settings",
            "sectionDescription": "Control result count and repeat deliveries. Set Maximum cost per run in Apify to limit spending."
          },
          "dedupe": {
            "title": "Skip previously returned jobs",
            "type": "object",
            "description": "Avoid repeat jobs in recurring searches. An empty key keeps each search separate. A named key shares history across searches using that key within your account. Turn off for repeatable one-off searches.",
            "editor": "schemaBased",
            "default": {
              "enabled": true,
              "key": "default"
            },
            "prefill": {
              "enabled": true,
              "key": ""
            },
            "properties": {
              "enabled": {
                "title": "Skip repeat jobs",
                "type": "boolean",
                "description": "Skip jobs already delivered for this search or alert.",
                "editor": "checkbox",
                "default": true,
                "prefill": true
              },
              "key": {
                "title": "Alert key (optional)",
                "type": "string",
                "description": "Leave empty for separate history per search. Reuse a named key to share history across searches within your account. Use different keys for separate alerts. This is not a secret.",
                "editor": "textfield",
                "default": "default",
                "prefill": "",
                "maxLength": 256
              }
            },
            "required": [
              "enabled"
            ],
            "additionalProperties": false
          },
          "analyticsEnabled": {
            "title": "Share anonymous run statistics",
            "type": "boolean",
            "description": "Optionally share aggregate run statistics to help improve reliability. Excludes account and run IDs, searches, job data, URLs, credentials, and persistent caller identifiers.",
            "editor": "checkbox",
            "default": false,
            "prefill": false,
            "sectionCaption": "Privacy",
            "sectionDescription": "Anonymous statistics are optional and off by default."
          },
          "schemaVersion": {
            "title": "Input format version",
            "type": "string",
            "description": "Keep this value unchanged. It identifies the input format expected by the Actor.",
            "editor": "select",
            "default": "nomad-agent-job-search-input-v1",
            "prefill": "nomad-agent-job-search-input-v1",
            "enum": [
              "nomad-agent-job-search-input-v1"
            ],
            "enumTitles": [
              "v1 — current input format"
            ],
            "sectionCaption": "For API users",
            "sectionDescription": "Keep the supported input format version."
          }
        },
        "required": [
          "schemaVersion"
        ],
        "additionalProperties": false
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn job results",
        "description": "Structured jobs with original links, optional descriptions, company details, and AI enrichment status.",
        "properties": {
          "dataset": {
            "type": "string",
            "title": "Job results",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "runSummary": {
            "type": "string",
            "title": "Run summary",
            "description": "See how many jobs were returned, whether results were limited, and any retry suggestion.",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/RUN-SUMMARY"
          }
        }
      },
      "dockerfile": "./Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "LinkedIn jobs",
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "custom",
              "data",
              "identity",
              "llm",
              "raw",
              "schemaVersion"
            ],
            "properties": {
              "schemaVersion": {
                "enum": [
                  "nomad-agent-job-v1"
                ],
                "type": "string"
              },
              "identity": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "externalId",
                  "source",
                  "url"
                ],
                "properties": {
                  "source": {
                    "type": "string"
                  },
                  "externalId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "description": "Original job ID and source link."
              },
              "data": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "application",
                  "benefits",
                  "classification",
                  "company",
                  "compensation",
                  "constraints",
                  "domains",
                  "domainsRaw",
                  "employment",
                  "funding",
                  "locations",
                  "requirements",
                  "seniority",
                  "title"
                ],
                "properties": {
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "company": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "department",
                      "logoUrl",
                      "name",
                      "sourceId",
                      "url"
                    ],
                    "properties": {
                      "name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "sourceId": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "department": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "url": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "logoUrl": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "description": "Hiring company details."
                  },
                  "classification": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "industries",
                      "jobFunctions"
                    ],
                    "properties": {
                      "industries": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "string"
                        }
                      },
                      "jobFunctions": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "description": "Job categories listed by the source, translated when requested."
                  },
                  "domains": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "items": {
                      "type": "string"
                    }
                  },
                  "domainsRaw": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "items": {
                      "type": "string"
                    }
                  },
                  "locations": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "city",
                        "countryCode",
                        "countryName",
                        "facilityName",
                        "latitude",
                        "longitude",
                        "positionsAvailable",
                        "postalCode",
                        "raw",
                        "region",
                        "streetAddress"
                      ],
                      "properties": {
                        "raw": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "countryName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "countryCode": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "city": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "region": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "postalCode": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "streetAddress": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "facilityName": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "positionsAvailable": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        },
                        "latitude": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "longitude": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "description": "Job location with its country code, when known."
                    }
                  },
                  "employment": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "applicantLocationRequirements",
                      "contractTypes",
                      "durationMonths",
                      "hoursPerWeek",
                      "hoursPerWeekRaw",
                      "startDate",
                      "startDateRaw",
                      "workArrangements",
                      "workSchedules"
                    ],
                    "properties": {
                      "workArrangements": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "enum": [
                            "remote",
                            "hybrid",
                            "onsite"
                          ],
                          "type": "string"
                        }
                      },
                      "applicantLocationRequirements": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "string"
                        }
                      },
                      "workSchedules": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "string"
                        }
                      },
                      "contractTypes": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "string"
                        }
                      },
                      "durationMonths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "hoursPerWeek": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "hoursPerWeekRaw": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "startDate": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "startDateRaw": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "description": "Work arrangement, schedule, and contract type."
                  },
                  "application": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "applicantSnapshot",
                      "applyMethodRaw",
                      "availability",
                      "deadline",
                      "directApply",
                      "eligibilityCriteria",
                      "email",
                      "hiringContacts",
                      "postedAt",
                      "referenceNumber",
                      "referenceNumberIssuer",
                      "selectionProcess",
                      "url"
                    ],
                    "properties": {
                      "postedAt": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "deadline": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "referenceNumber": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "referenceNumberIssuer": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "applicantSnapshot": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "additionalProperties": false,
                        "required": [
                          "capturedAt",
                          "count",
                          "raw"
                        ],
                        "properties": {
                          "count": {
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "raw": {
                            "type": "string"
                          },
                          "capturedAt": {
                            "type": "string"
                          }
                        },
                        "description": "Applicant count as shown when the job was checked."
                      },
                      "url": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "email": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "directApply": {
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "applyMethodRaw": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "availability": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "additionalProperties": false,
                        "required": [
                          "evidence",
                          "observedAt",
                          "status"
                        ],
                        "properties": {
                          "status": {
                            "enum": [
                              "observed_available",
                              "observed_unavailable",
                              "unknown"
                            ],
                            "type": "string"
                          },
                          "evidence": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": false,
                              "required": [
                                "kind",
                                "value"
                              ],
                              "properties": {
                                "kind": {
                                  "enum": [
                                    "search_card_present",
                                    "detail_http_status",
                                    "detail_jobposting_markup",
                                    "detail_unavailable_marker",
                                    "source_label"
                                  ],
                                  "type": "string"
                                },
                                "value": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "description": "Evidence used to check whether the posting is available."
                            }
                          },
                          "observedAt": {
                            "type": "string"
                          }
                        },
                        "description": "Availability when checked; the posting may change later."
                      },
                      "hiringContacts": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "address",
                            "email",
                            "name",
                            "organization",
                            "photoUrl",
                            "title",
                            "url"
                          ],
                          "properties": {
                            "name": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "title": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "organization": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "url": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "photoUrl": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "email": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "address": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "additionalProperties": false,
                              "required": [
                                "city",
                                "countryCode",
                                "countryName",
                                "postalCode",
                                "raw",
                                "region",
                                "streetAddress"
                              ],
                              "properties": {
                                "raw": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "countryName": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "countryCode": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "city": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "region": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "postalCode": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "streetAddress": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "description": "Postal address published for an application contact."
                            }
                          },
                          "description": "Named public hiring contact."
                        }
                      },
                      "eligibilityCriteria": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "selectionProcess": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "description": "Publication and application details."
                  },
                  "seniority": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "levels",
                      "raw"
                    ],
                    "properties": {
                      "raw": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "string"
                        }
                      },
                      "levels": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "enum": [
                            "intern",
                            "entry",
                            "junior",
                            "mid",
                            "senior",
                            "staff",
                            "lead",
                            "principal",
                            "manager",
                            "director",
                            "executive",
                            "R1",
                            "R2",
                            "R3",
                            "R4"
                          ],
                          "type": "string"
                        }
                      }
                    },
                    "description": "Job seniority or research-career stage."
                  },
                  "requirements": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "certifications",
                      "education",
                      "experience",
                      "languages",
                      "preferredSkills",
                      "requiredSkills",
                      "skillsQualifications",
                      "specificRequirements"
                    ],
                    "properties": {
                      "education": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "field",
                            "level",
                            "preferred",
                            "yearsRequired"
                          ],
                          "properties": {
                            "level": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "field": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "yearsRequired": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "preferred": {
                              "type": [
                                "boolean",
                                "null"
                              ]
                            }
                          },
                          "description": "One accepted education option. yearsRequired means experience required alongside that qualification, not the length of the degree."
                        }
                      },
                      "experience": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "field",
                            "maximumYears",
                            "minimumYears",
                            "raw"
                          ],
                          "properties": {
                            "field": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "minimumYears": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "maximumYears": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "raw": {
                              "type": [
                                "string",
                                "null"
                              ]
                            }
                          },
                          "description": "Required experience and its original wording."
                        }
                      },
                      "languages": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "language",
                            "level",
                            "required"
                          ],
                          "properties": {
                            "language": {
                              "type": "string"
                            },
                            "level": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "required": {
                              "type": [
                                "boolean",
                                "null"
                              ]
                            }
                          },
                          "description": "Language, proficiency, and whether it is required."
                        }
                      },
                      "requiredSkills": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "name",
                            "yearsRequired"
                          ],
                          "properties": {
                            "name": {
                              "type": "string"
                            },
                            "yearsRequired": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "description": "Skill and associated experience, when stated."
                        }
                      },
                      "preferredSkills": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "name",
                            "yearsRequired"
                          ],
                          "properties": {
                            "name": {
                              "type": "string"
                            },
                            "yearsRequired": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "description": "Skill and associated experience, when stated."
                        }
                      },
                      "certifications": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "string"
                        }
                      },
                      "skillsQualifications": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "specificRequirements": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "description": "Education, experience, language, skill, and certification requirements."
                  },
                  "benefits": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "funding": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "programme"
                    ],
                    "properties": {
                      "programme": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "description": "Funding information stated in the posting."
                  },
                  "compensation": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "currency",
                      "exact",
                      "maximum",
                      "minimum",
                      "period",
                      "raw"
                    ],
                    "properties": {
                      "currency": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "exact": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "minimum": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "maximum": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "period": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "raw": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "description": "Salary or pay details with their original wording."
                  },
                  "constraints": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "locationPreference",
                      "securityClearance",
                      "visaSponsorship",
                      "workAuthorization"
                    ],
                    "properties": {
                      "visaSponsorship": {
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "workAuthorization": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "securityClearance": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "locationPreference": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "description": "Applicant eligibility requirements."
                  }
                },
                "description": "Job details from the source, with optional AI filling supported missing fields."
              },
              "custom": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "data",
                  "schemaId"
                ],
                "properties": {
                  "schemaId": {
                    "type": "string"
                  },
                  "data": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "description": "Optional company details. schemaId identifies their format."
              },
              "llm": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "completedAt",
                  "filledFields",
                  "model",
                  "promptVersion",
                  "provider",
                  "requestedFields",
                  "status"
                ],
                "properties": {
                  "status": {
                    "enum": [
                      "not_requested",
                      "completed",
                      "failed"
                    ],
                    "type": "string"
                  },
                  "requestedFields": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "filledFields": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "provider": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "model": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "promptVersion": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "completedAt": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "description": "AI enrichment status and origin. Enriched job facts appear in data."
              },
              "raw": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "description",
                  "descriptionHtml"
                ],
                "properties": {
                  "description": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "descriptionHtml": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "description": "Full original description text and HTML."
              }
            },
            "description": "One LinkedIn job with its details and original link.",
            "title": "LinkedIn job"
          },
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "schemaVersion",
                  "identity",
                  "data",
                  "custom",
                  "llm",
                  "raw"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "schemaVersion": {
                    "label": "Format version"
                  },
                  "identity": {
                    "label": "Job link and ID"
                  },
                  "data": {
                    "label": "Job details"
                  },
                  "custom": {
                    "label": "Company details"
                  },
                  "llm": {
                    "label": "AI enrichment"
                  },
                  "raw": {
                    "label": "Description"
                  }
                }
              }
            },
            "jobs": {
              "title": "Jobs",
              "transformation": {
                "flatten": [
                  "data",
                  "identity"
                ],
                "fields": [
                  "data.title",
                  "data.company.name",
                  "data.locations",
                  "data.employment.workArrangements",
                  "data.application.postedAt",
                  "identity.source",
                  "identity.url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "data.title": {
                    "label": "Job title"
                  },
                  "data.company.name": {
                    "label": "Company"
                  },
                  "data.locations": {
                    "label": "Locations"
                  },
                  "data.employment.workArrangements": {
                    "label": "Work arrangement"
                  },
                  "data.application.postedAt": {
                    "label": "Posted"
                  },
                  "identity.source": {
                    "label": "Source"
                  },
                  "identity.url": {
                    "label": "Source URL"
                  }
                }
              }
            }
          }
        }
      },
      "icon": "./icon.png",
      "readme": "# LinkedIn Jobs Scraper (No Cookies) + AI Enrichment\n\n<!-- hero -->\n$0.3/1K jobs | Search public LinkedIn jobs by role and location with full descriptions and original job links. No cookies, login or API key. Skips repeat jobs for alerts and job boards; optional AI enrichment and English translation. Independent, unofficial tool. Not affiliated with or endorsed by LinkedIn.\n<!-- /hero -->\n\n## LinkedIn Jobs Bulk Search Scraper\n\nOur scraper searches public LinkedIn job postings by role and location and lets you filter by posting age, work arrangement, exact location and company facts. Every job comes in one consistent format with the original LinkedIn link and, by default, the complete description in text and HTML. It is ideal for job alerts, job boards, spreadsheets and recruiting pipelines.\n\n- Want research jobs (PhD, postdoc, faculty)? Our [EURAXESS Jobs Scraper](https://apify.com/jobatlas/euraxess-enrich-translate-normalize-scraper) reads a stored, hourly-refreshed collection of recent EURAXESS offers and adds deadlines and funding programme. It covers EURAXESS only.\n- Want startup jobs? Our [Y Combinator Jobs Scraper](https://apify.com/jobatlas/ycombinator-enrich-translate-normalize-scraper) reads Y Combinator's job listings. It covers Y Combinator companies only.\n- Browse all Job Atlas job-data Actors: https://apify.com/jobatlas\n\n### Key Benefits\n\n- No cookies or login: you never share a LinkedIn session or account, so there is nothing to paste and no account at risk.\n- Low pricing: $0.30 per 1,000 jobs, with no start fee. Platform usage is included in that price.\n- Full details: the complete description (text and HTML) and the original LinkedIn link on every job, plus company, location, seniority and applicant-count fields when LinkedIn shows them.\n- No repeats across runs: schedule the same search and jobs already delivered to you are skipped.\n- Optional AI enrichment and English translation, with no AI or translation key to bring. Both are off by default and billed per job (see Pricing below).\n- LinkedIn can limit request rates. A run then ends early with fewer jobs than requested (`RUN-SUMMARY` status `partial`), and you pay only for returned jobs.\n\n## How It Works\n\n1. Provide your search:\n   - (optional) Job keyword (e.g., `software engineer`, `Python`). Leave it empty to search all roles in a location.\n   - (optional) Location (e.g., `United States`, `Spain`, `European Union`). City, region or country. Leave it empty for worldwide results.\n   - (optional) Posted within (e.g., `7d`). Use `any`, or a duration such as `1h`, `24h`, `3d`, `2w` or `6m`. The default is `24h`. When a date filter is on, jobs without a posting date are dropped.\n   - (optional) Work arrangements: remote, hybrid, on-site, or any mix. A matching search can still return jobs whose own arrangement is unknown; jobs that clearly conflict are excluded.\n2. Set **Maximum results** (`maxItems`). The default is `100` and the limit is 1,000 per run; `0` requests 1,000. Start with 10 to check the fit.\n3. Run the Actor and open the dataset. `RUN-SUMMARY` in the run's key-value store shows how many jobs were delivered and whether a retry is suggested.\n\nRun the same search again and you get only postings you have not received yet; set `dedupe.enabled` to `false` to see everything again. If you omit `dedupe` in an API call, the default key `default` applies and all your searches share one history; pass `\"key\": \"\"` for per-search history.\n\nMore settings:\n\n- `orderBy` - Newest first (default) or oldest first. Jobs with an unknown date come last.\n- `includeRaw` - Keep the full description text and HTML in `raw`. Default is on. Turn it off for smaller exports; AI enrichment still works.\n- `dedupe` - Skip jobs already delivered. Default is on. Leave `key` empty and each search keeps its own history; reuse one named key to share history across searches in your account, and use different keys for separate alerts. History is bounded, so it is not a permanent archive.\n- `linkedinSearch` (advanced) - Combine up to eight keyword and location searches in one run and remove duplicate jobs. Clear the main keyword and location when you use it.\n- `filters` (advanced) - Keep jobs by AND/OR rules on job fields, such as a title that does not contain `manager`. The input form's JSON editor has an example.\n- `strictGeography` (advanced) - Require a country, region or city that LinkedIn confirms. Jobs with unknown locations are excluded by default, or you can stop the run instead.\n- `companyProfileEnrichment` - Add facts from each job's public company page, for up to 25 unique companies per run. No separate charge. `companyFilters` (advanced) needs this switched on.\n\nTry the extras safely: switch on **First-run mode** to get up to five jobs with Silver AI enrichment and English translation. It keeps your search and filters, turns off repeat suppression and analytics, and leaves out descriptions. Five jobs cost about $0.05 (5 x $0.0103 = $0.0515), so a $0.10 Maximum cost per run is enough. Turn it off again to use your own settings.\n\n## Optional extras and pricing\n\nYou pay per returned job. AI enrichment and English translation are separate per-job events and are off by default. The **Pricing** tab is authoritative for current rates and scheduled changes.\n\n| Feature | Billed event | Price per event | Price per 1,000 jobs | What it adds |\n|---|---|---:|---:|---|\n| Job results | `result` | $0.0003 | $0.30 | Structured job records and LinkedIn links |\n| Silver AI enrichment | `position-enrichment` | $0.004 | +$4.00 | Missing supported facts extracted from the description |\n| Gold AI enrichment | `position-enrichment-gold` | $0.010 | +$10.00 | Silver plus a second check |\n| English translation | `translation` | $0.006 | +$6.00 | Selected short display fields in English |\n| Company details | none | $0 | no extra charge | Facts from the linked public company page |\n\nFor example, 1,000 jobs with Silver enrichment and translation cost $0.30 + $4.00 + $6.00 = $10.30. A failed AI enrichment is not charged. Set Apify's Maximum cost per run before large searches; the cap can end a run early.\n\nAI enrichment fills only supported fields that are missing and never overwrites source facts. Silver is the standard tier. AI can make mistakes, so review important facts. English translation covers selected fields such as titles, requirements and benefits. Full descriptions, company names, locations, skills and URLs stay in their original form.\n\nGood to know:\n\n- LinkedIn can limit the request rate during a run. The run then ends early with the jobs it has already fetched, and `RUN-SUMMARY` shows status `partial` with a suggested retry delay. Jobs whose details could not be fetched are held for a later retry and are not charged. Wait the suggested time, then run again with the same input; repeat suppression skips the jobs you already received.\n- Results depend on the public LinkedIn postings available. Filters, source restrictions and your budget can reduce the count. Strict location and company filters exclude jobs with missing evidence.\n- Fields LinkedIn does not publish stay `null`. The Actor does not fill them by guessing.\n\n### Data You'll Receive\n\n- Job details: title, complete description (text and HTML), LinkedIn job ID and link, posting date, seniority level, industry, employment type when shown.\n- Company: name, LinkedIn company ID and link; optionally more facts from the company page.\n- Location: the label LinkedIn shows plus city, region, country code and coordinates when available.\n- Application: applicant-count snapshot, direct-apply flag and reference number when LinkedIn shows them.\n- Salary, required skills and hiring contacts: only when the posting provides them. Otherwise the field is `null`.\n- AI status: the `llm` block records whether enrichment ran and which fields it filled.\n\nThe JSON format is `nomad-agent-job-v1` with six roots: `schemaVersion`, `identity`, `data`, `custom`, `llm` and `raw`. `null` means unknown; `[]` means confirmed empty. Sanitize source HTML before you display it.\n\n### Sample output data\n\nHere is an example job from this Actor, observed on October 16, 2026. Empty fields are left out and long text is cut for length. Values change with the source, and a sample is not a promise that the job is still open.\n\n```json\n{\n  \"schemaVersion\": \"nomad-agent-job-v1\",\n  \"identity\": {\n    \"source\": \"linkedin\",\n    \"externalId\": \"4471641260\",\n    \"url\": \"https://www.linkedin.com/jobs/view/software-development-engineer-iii-at-clear-4471641260\"\n  },\n  \"data\": {\n    \"title\": \"Software Development Engineer III\",\n    \"company\": {\n      \"name\": \"CLEAR\",\n      \"sourceId\": \"961661\",\n      \"url\": \"https://www.linkedin.com/company/clear-by-alclear-llc\"\n    },\n    \"classification\": {\n      \"industries\": [\n        \"Consumer Services\"\n      ]\n    },\n    \"locations\": [\n      {\n        \"raw\": \"New York, NY\",\n        \"countryName\": \"United States\",\n        \"countryCode\": \"US\",\n        \"city\": \"New York\",\n        \"region\": \"NY\",\n        \"latitude\": 40.713047,\n        \"longitude\": -74.00723\n      }\n    ],\n    \"employment\": {\n      \"workSchedules\": [\n        \"full_time\"\n      ]\n    },\n    \"application\": {\n      \"postedAt\": \"2026-10-16T09:41:21.000Z\",\n      \"deadline\": \"2027-04-22T17:59:16.000Z\",\n      \"referenceNumber\": \"8100208\",\n      \"referenceNumberIssuer\": \"CLEAR\",\n      \"applicantSnapshot\": {\n        \"count\": 25,\n        \"raw\": \"Be among the first 25 applicants\",\n        \"capturedAt\": \"2026-10-16T16:48:13.869319Z\"\n      },\n      \"directApply\": true,\n      \"applyMethodRaw\": \"Apply\",\n      \"availability\": {\n        \"status\": \"observed_available\",\n        \"observedAt\": \"2026-10-16T16:48:06.220427Z\"\n      }\n    },\n    \"seniority\": {\n      \"raw\": [\n        \"Mid-Senior level\"\n      ],\n      \"levels\": [\n        \"mid\",\n        \"senior\"\n      ]\n    },\n    \"requirements\": {\n      \"experience\": [\n        {\n          \"minimumYears\": 6\n        }\n      ]\n    }\n  },\n  \"llm\": {\n    \"status\": \"not_requested\"\n  },\n  \"raw\": {\n    \"description\": \"CLEAR is building THE secure identity company of the future. Our mission is to make experiences safer ...\"\n  }\n}\n```\n\n## LinkedIn Jobs API\n\nResults are stored in a dataset that you can export as CSV, JSON or Excel, or read on demand through the Apify API. Maintained API, MCP, n8n, Make, Python and Agent Skill assets are available in the [integration guide](https://github.com/Exdenta/jobatlas/blob/main/docs/linkedin.md). Airtable is a post-run destination projection, not a runnable template, and no Zapier workflow is claimed. Having an asset does not prove a hosted connection or a write to your destination.\n\n```python\nfrom decimal import Decimal\nfrom apify_client import ApifyClient\n\nclient = ApifyClient(\"<YOUR_APIFY_TOKEN>\")\nrun = client.actor(\n    \"jobatlas/linkedin-enrich-translate-normalize-scraper\"\n).call(run_input={\n    \"schemaVersion\": \"nomad-agent-job-search-input-v1\",\n    \"keyword\": \"software engineer\",\n    \"location\": \"United States\",\n    \"postedWithin\": \"7d\",\n    \"maxItems\": 10,\n    \"includeRaw\": True,\n    \"aiEnrichment\": {\"enabled\": False, \"accuracy\": \"silver\"},\n    \"translateToEnglish\": False,\n    \"companyProfileEnrichment\": False,\n    \"analyticsEnabled\": False,\n    \"dedupe\": {\"enabled\": True, \"key\": \"\"},\n}, build=\"latest\", max_items=10, max_total_charge_usd=Decimal(\"0.10\"))\n\nif run[\"status\"] != \"SUCCEEDED\" or not run.get(\"buildId\") or not run.get(\"buildNumber\"):\n    raise RuntimeError(\"Actor run failed or omitted its resolved build identity\")\n\nfor job in client.dataset(run[\"defaultDatasetId\"]).iterate_items():\n    print(job[\"data\"][\"title\"], job[\"identity\"][\"url\"])\n```\n\n### Support and Feedback\n\nWe improve these scrapers from your feedback. If something breaks or you need a filter:\n\n- Open an issue on the Actor's Issues tab. For a correction or removal request, include the job URL or ID and leave out private information.\n- If this Actor saved you time, a short review on the Store helps other users find it.\n\n## Run evidence\n\n- Sample record: a real job from build 1.0.10, run `6ITwglMxz7yooffcq`, October 16, 2026. That run asked for 10 jobs and returned 3, with `RUN-SUMMARY` status `partial` because LinkedIn limited the request rate, as described under Good to know.\n- Build identity: the example above follows `latest`. Check the [current default build API](https://api.apify.com/v2/acts/jobatlas~linkedin-enrich-translate-normalize-scraper/builds/default) for the default build number and immutable ID, and record the build ID and number that your run returns. A `1.0.x` check alone does not prove compatibility; follow the selected integration template's compatibility guide.\n- Reading a run: inspect the dataset together with `RUN-SUMMARY` and each job's `llm.status`. A successful status alone does not show complete coverage. Restrictive filters or repeat suppression can produce zero results.\n- Agent setup: the [setup skill](https://github.com/Exdenta/jobatlas/blob/main/.agents/skills/public-apify-actors/SKILL.md) and the [public setup guide](https://github.com/Exdenta/jobatlas/blob/main/docs/public-actors-setup.md) cover the documented API example.\n\n## Product guides and related tools\n\n- [Product overview and public links](https://jobatlas.dev/actors/directory/normalized-jobs#jobatlas-linkedin-enrich-translate-normalize-scraper)\n- [Job Atlas job-data tools](https://jobatlas.dev/actors)\n\n## Job Atlas\n\nExplore the Job Atlas job-data and matching Actors.\n\n- [LinkedIn jobs](https://apify.com/jobatlas/linkedin-enrich-translate-normalize-scraper)\n- [EURAXESS jobs](https://apify.com/jobatlas/euraxess-enrich-translate-normalize-scraper)\n- [Y Combinator jobs](https://apify.com/jobatlas/ycombinator-enrich-translate-normalize-scraper)\n- [AI job fit scorer](https://apify.com/jobatlas/ai-job-fit-scorer)\n\n[Product guide](https://jobatlas.dev/actors/linkedin) | [Source and client examples](https://github.com/Exdenta/jobatlas) | [Setup skill](https://github.com/Exdenta/jobatlas/blob/main/.agents/skills/public-apify-actors/SKILL.md) | [Setup guide](https://github.com/Exdenta/jobatlas/blob/main/docs/public-actors-setup.md)\n\n* * *\n\n**Independent tool.** We built and run this Actor ourselves. LinkedIn does not operate, sponsor or endorse it, and its name is used only to say which site the data comes from. Contact the Actor creator through the Apify Issues tab for help or privacy requests.\n"
    },
    "buildNumber": "1.0.13",
    "imageDigest": "6c8a5effac3e37198bd2fb4e438e552c9f124fc3733af0659baa04fb7af5a042",
    "actVersion": {
      "sourceType": "TARBALL",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.010275555555555555
    }
  }
}