Landing.jobs Scraper
Pricing
from $0.46 / 1,000 results
Landing.jobs Scraper
Extract tech job listings from Landing.jobs. Filter by keyword, country, remote, contract type and salary. Full descriptions, requirements and perks included.
Pricing
from $0.46 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
5
Total users
3
Monthly active users
5 days ago
Last modified
Categories
Share

Extract job listings from landing.jobs at scale, in a clean, consistent structure ready for analysis, job boards, recruiting tools and market research. No API key required.
Why this scraper?
🎯 Built for Portugal and remote Europe
A dedicated tech-focused scraper, not a global tool with a country dropdown. Search, locations and currency (EUR) are tuned for landing.jobs.
📄 Complete job data
Full job title and description, direct listing URL and publish date for every record.
💶 Salary data
Salary information parsed from the listing where the employer publishes it, in EUR. Missing salaries are returned as null, never guessed.
🏢 Company details
Hiring company name plus the profile details the source publishes, such as logo and company page.
📍 Precise location
City, region and country plus latitude/longitude for mapping and radius analysis.
🔁 Repost & change detection
Every record carries isRepost and changeStatus, so daily feeds return genuinely new jobs instead of reposted duplicates.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
keywords | string | "developer" | Job title, skill, or technology to search for (e.g. 'Java', 'DevOps', 'React'). Matched against title, tags, and description. |
location | string | (empty) | City or country code to filter by (e.g. 'Lisbon', 'PT', 'Berlin'). |
contractTypes | array | (empty) | Filter by contract type. Leave empty for all types. |
remoteOnly | boolean | false | When enabled, only return remote job listings. |
daysOld | integer | 0 | Only return jobs posted within this many days. Set to 0 to disable. |
maxResults | integer | 100 | Maximum number of job listings to return. 0 = unlimited. Note: Landing.jobs is a curated board with a small active job count. |
includeCompanyProfile | boolean | true | Enrich each job with the company's logo, pitch, website, and description. |
geocode | boolean | false | Add latitude and longitude for each job's city (via OpenStreetMap Nominatim). |
descriptionFormat | string | "all" | Which representation to keep for description, requirements, perks, and nice-to-have. 'all' keeps HTML, text, and Markdown. |
descriptionMaxLength | integer | 0 | Truncate each content block to this many characters. 0 = no truncation. |
compact | boolean | false | Output only core fields — optimised for AI-agent and MCP workflows. |
excludeEmptyFields | boolean | false | Drop null, empty-string, and empty-array fields from each record. |
skipReposts | boolean | false | Skip jobs already seen in a previous run (within 90 days). |
incrementalMode | boolean | false | Track changes across runs. Each record is tagged NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED. |
stateKey | string | (empty) | Stable identifier for the tracked search universe. Leave empty to use the default tracker. |
emitUnchanged | boolean | false | In incremental mode, also emit records that haven't changed since the last run. |
emitExpired | boolean | false | In incremental mode, also emit records no longer present (tagged EXPIRED). |
Output schema
Every field below is present on every record. Fields the source does not publish for a given job are returned as null rather than omitted.
| Field | Type | Description |
|---|---|---|
id | string | Landing.jobs job ID. |
title | string | Job title. |
url | string | Job posting URL. |
companyName | string | Hiring company. |
companyId | string | Landing.jobs company ID. |
companySlug | string | Company slug from the URL. |
companyWebsite | string | Company website. |
companyLogoUrl | string | Company logo image URL. |
companyPitch | string | Short company pitch. |
companyDescription | string | Company description. |
contractType | string | Full-time, Freelance, etc. |
remote | boolean | Whether the role is remote. |
relocationPaid | boolean | Whether relocation is paid. |
city | string | City. |
countryCode | string | ISO country code. |
locations | array | All listed locations. |
latitude | number | Latitude (with geocode). |
longitude | number | Longitude (with geocode). |
tags | array | Tech and skill tags. |
salaryMin | number | Gross salary lower bound. |
salaryMax | number | Gross salary upper bound. |
currencyCode | string | Salary currency. |
description | string | Full job description in plain text. |
descriptionText | string | Full job description in plain text. |
descriptionMarkdown | string | Description markdown. |
requirements | string | Requirements. |
requirementsText | string | Requirements text. |
requirementsMarkdown | string | Requirements markdown. |
perks | string | Perks. |
perksText | string | Perks text. |
perksMarkdown | string | Perks markdown. |
niceToHave | string | Nice to have. |
niceToHaveText | string | Nice to have text. |
niceToHaveMarkdown | string | Nice to have markdown. |
publishDate | string | Publish date. |
publishDateISO | string | Posting date, ISO 8601. |
expiresAt | string | Expiry date. |
createdAt | string | Created at. |
updatedAt | string | Updated at. |
source | string | landing.jobs. |
scrapedAt | string | Scrape timestamp. |
contentHash | string | Stable hash for change detection. |
isRepost | boolean | true when the listing is a repost of an earlier job (detected by content hash). |
Example record
{"id": "19066","title": "Senior Java Software Developer","url": "https://landing.jobs/at/inscale/senior-java-software-developer-in-lisbon-2025","companyName": "INSCALE","companyId": "4918","companySlug": "inscale","companyWebsite": "https://www.inscale.net","companyLogoUrl": "https://s3.eu-central-1.amazonaws.com/storage.landing.jobs/lwp8lu42cp4zvjkw7ahqcrojet54","companyPitch": "Anyone can work globally. ","companyDescription": "At INSCALE, we create success by matching companies with the right tech talent, building strong partnerships that last and help both sides grow.\r\nOne of the hardest problems companies face today is fi …","contractType": "Full-time","remote": false,"relocationPaid": false,"city": "Lisbon","countryCode": "PT","locations": [{"city": "Lisbon","country_code": "PT"}],"latitude": 38.7077507,"longitude": -9.1365919,"tags": ["Spring Boot","Java","SQL","Apache Kafka"],"salaryMin": 50000,"salaryMax": 67000,"currencyCode": "EUR","description": "<div>Our client is a Global retail chain that brings Scandinavian design and quality to the world through an extensive range of quality products for sleeping and living. Known for its commitment to si …","descriptionText": "Our client is a Global retail chain that brings Scandinavian design and quality to the world through an extensive range of quality products for sleeping and living. Known for its commitment to simplic …","descriptionMarkdown": "Our client is a Global retail chain that brings Scandinavian design and quality to the world through an extensive range of quality products for sleeping and living. Known for its commitment to simplic …","requirements": "<ul><li>6-8 years of experience in software development with Java.</li><li>5+ years working with Spring Boot.</li><li>Experience with SQL.</li><li>Proactively solution oriented (Nothing is lost in the …","requirementsText": "6-8 years of experience in software development with Java. 5+ years working with Spring Boot. Experience with SQL. Proactively solution oriented (Nothing is lost in the cracks). Always on the ball. Di …","requirementsMarkdown": "- 6-8 years of experience in software development with Java.\n- 5+ years working with Spring Boot.\n- Experience with SQL.\n- Proactively solution oriented (Nothing is lost in the cracks).\n- Al …","perks": "<ul><li>Permanent contract with Inscale</li><li>14 salaries</li><li>22 days vacation</li><li>Portugal Holidays</li><li>Health insurance</li><li>Flex benefits</li><li>Career plan </li></ul>","perksText": "Permanent contract with Inscale 14 salaries 22 days vacation Portugal Holidays Health insurance Flex benefits Career plan ","perksMarkdown": "- Permanent contract with Inscale\n- 14 salaries\n- 22 days vacation\n- Portugal Holidays\n- Health insurance\n- Flex benefits\n- Career plan","niceToHave": "<ul><li>Experience with Cloud Native engineering.</li><li>Experience with Kafka.</li><li>Experience with Docker and Kubernetes.</li><li>Test Driven Development (TDD).</li></ul>","niceToHaveText": "Experience with Cloud Native engineering. Experience with Kafka. Experience with Docker and Kubernetes. Test Driven Development (TDD).","niceToHaveMarkdown": "- Experience with Cloud Native engineering.\n- Experience with Kafka.\n- Experience with Docker and Kubernetes.\n- Test Driven Development (TDD).","publishDate": "2025-02-26","publishDateISO": "2025-02-26","expiresAt": "2026-09-02","createdAt": "2025-02-26T08:53:02.254Z","updatedAt": "2026-06-03T11:09:56.878Z","source": "landing.jobs","scrapedAt": "2026-06-26T11:21:32.678Z","contentHash": "hbecef49f","isRepost": false}
Examples
Search for backend developer roles in Lisboa:
{"keywords": "backend developer","location": "Lisboa","maxResults": 100}
Only jobs from the last 3 days:
{"keywords": "backend developer","location": "Lisboa","maxResults": 100,"daysOld": 3}
Larger run with a hard cap:
{"keywords": "backend developer","location": "Lisboa","maxResults": 500}
Daily feed (run on a schedule):
{"keywords": "backend developer","daysOld": 1,"skipReposts": true,"maxResults": 500}
Schedule this input to run once a day in the Apify Scheduler — each run returns only jobs posted in the last 24 hours.
💰 Pricing
$0.48 per 1,000 results — you only pay for successfully retrieved listings. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.05 |
| 1,000 | ~$0.48 |
| 10,000 | ~$4.80 |
| 100,000 | ~$48.00 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Subscription tiers lower the rate further, down to $0.44 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 100 results | under 1 minute |
| 1,000 results | 2–4 minutes |
| 10,000 results | 20–35 minutes |
Known limitations
- Salary is only returned when the employer publishes it — many listings carry
nullsalary fields. - Company details vary per listing; the scraper returns what the source publishes and never invents data.
- Very large result sets are bounded by the source's own paging limits.
- Listings can be removed by the source at any time, so a small share of URLs may expire shortly after scraping.
Technical details
- Source: landing.jobs — Portugal and remote Europe job listings
- Coverage: everything the public search exposes, filterable via the input parameters above
- Retry: automatic retry on network errors with exponential backoff
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl