NVA Latvia Job Scraper
Pricing
from $1.49 / 1,000 results
NVA Latvia Job Scraper
Scrape all active job listings from the Latvian State Employment Agency (NVA) public vacancy portal. Structured JSON with salary, skills, and descriptions.
Pricing
from $1.49 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
42 minutes ago
Last modified
Categories
Share

Scrape all active job listings from the Latvian State Employment Agency (NVA) public vacancy portal — structured JSON output including job descriptions, salary ranges, work conditions, and ESCO skills. No API key required.
Why this scraper?
📋 Complete vacancy data
Every active listing from the official Latvian government job portal, including full job descriptions, required qualifications, and salary information.
💶 Salary extraction
Salary range parsed into structured salaryMin / salaryMax fields (EUR) with automatic period detection (monthly or hourly).
🎯 ESCO skill tags
Captures structured ESCO competency links attached to each vacancy — useful for labour market analysis and skills-gap research.
🔁 Repost detection
Cross-run deduplication (90-day memory) via skipReposts — run daily to get only genuinely new listings.
🗓️ Date filtering
Filter by daysOld to limit results to recently published vacancies. Combine with skipReposts: true for a daily incremental feed.
🔗 Direct URL mode
Pass specific vacancy URLs via startUrls to scrape individual listings on demand.
Input parameters
Filters
| Parameter | Type | Default | Description |
|---|---|---|---|
keyword | string | — | Search across job title, location, company and other text fields. Example: "programmētājs" or "Rīga" |
minSalary | integer | — | Only return vacancies with a gross salary at or above this amount (EUR) |
workload | string | — | "pilna" for full-time only, "nepilna" for part-time only |
remoteOnly | boolean | false | Only return fully remote vacancies |
partialRemoteOnly | boolean | false | Only return vacancies with partial remote option |
Behaviour
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResults | integer | 9999 | Maximum number of vacancies to return |
fetchDetails | boolean | true | Fetch full vacancy detail (description, work conditions, skills, education) |
skipReposts | boolean | false | Skip vacancies already seen in previous runs (90-day memory) |
daysOld | integer | — | Only return vacancies published within this many days |
startUrls | array | [] | Specific NVA vacancy URLs to scrape directly — overrides all filters |
Output schema
Always present
| Field | Type | Description |
|---|---|---|
id | string | Unique NVA vacancy ID |
url | string | Public URL to the vacancy on cvvp.nva.gov.lv |
title | string | Job title / profession name (in Latvian) |
company | string | Employer name |
location | string | Work location address |
vacancyNumber | string|null | NVA vacancy reference number (e.g. "260424-146") |
salaryText | string|null | Raw salary string as published (e.g. "900-1450") |
salaryMin | number|null | Minimum salary (null if not published) |
salaryMax | number|null | Maximum salary (null if single value or not published) |
salaryCurrency | string | Always "EUR" |
salaryPeriod | string|null | "MONTH" for monthly, "HOUR" for hourly rates |
validUntil | string|null | Application deadline (YYYY-MM-DD) |
publishDate | string|null | Publication date (YYYY-MM-DD) |
publishDateISO | string|null | Publication timestamp in ISO 8601 format |
isRepost | boolean | Whether this vacancy was seen in a previous run |
originalPublishDate | string|null | First-seen publish date if repost |
originalUrl | string|null | Original URL if repost |
contentHash | string | 16-char MD5 fingerprint for change detection |
source | string | Always "cvvp.nva.gov.lv" |
scrapedAt | string | ISO timestamp of when this record was scraped |
With fetchDetails: true
| Field | Type | Description |
|---|---|---|
descriptionHtml | string|null | Full job description as HTML (base64 images stripped) |
descriptionText | string|null | Plain text version of the job description |
descriptionMarkdown | string|null | Markdown version of the job description |
summary | string|null | First 200 characters of the description (plain text) |
jobArea | string|null | Industry / occupation area (e.g. "Tirdzniecība / Mārketings") |
contractType | string|null | Contract type (e.g. "Darbinieka amats uz nenoteiktu laiku") |
workSchedule | string|null | Work schedule (e.g. "Maiņu darbs") |
workload | string|null | Full-time or part-time (e.g. "Viena vesela slodze") |
vacancyCount | integer|null | Number of open positions |
startDate | string|null | Planned start date if specified |
isRemote | boolean|null | Whether fully remote work is possible |
isPartialRemote | boolean|null | Whether partial remote work is possible |
isSeasonal | boolean|null | Whether this is a seasonal position |
hasTravelRequired | boolean|null | Whether business travel is required |
hasAccommodation | boolean|null | Whether accommodation is provided |
educationLevel | string|null | Required education level (null if not specified) |
educationField | string|null | Required education field (null if not specified) |
languageRequirements | array | Language requirements (empty array if none specified) |
computerSkills | array | Computer skill requirements (empty array if none) |
escoSkills | array | ESCO competency objects: {name, uri} (empty if none) |
driverLicenseCategories | string|null | Required driving licence categories (null if none) |
tractorLicenseCategories | string|null | Required tractor/special vehicle licence categories (null if none) |
certifications | string|null | Required certifications (null if none) |
additionalRequirements | string|null | Additional requirements text (null if none) |
salaryPaymentMethod | string|null | Salary payment method/type (null if not specified) |
stateLanguageLevel | string|null | Required Latvian state language level (e.g. "Augstākā līmeņa 2.pakāpe (C2)") |
status | string|null | Vacancy status from the portal (e.g. "AKTUALA") |
Example record
{"id": "448829929","url": "https://cvvp.nva.gov.lv/#/pub/vakances/448829929","title": "MAZUMTIRDZNIECĪBAS VEIKALA PĀRDEVĒJS","company": "\"FIRMA MADARA 89\" SIA","location": "LATVIJA, Selgas iela 1B, Roja, Rojas pag., Talsu nov.","vacancyNumber": "260424-146","salaryText": "900","salaryMin": 900,"salaryMax": null,"salaryCurrency": "EUR","salaryPeriod": "MONTH","validUntil": "2026-05-08","publishDate": "2026-04-24","publishDateISO": "2026-04-24T14:47:57.090Z","descriptionHtml": "<p><b>Galvenie darba pienākumi:</b></p><ul><li>Pārtikas un nepārtikas preču tirdzniecība</li></ul>","descriptionText": "Galvenie darba pienākumi: Pārtikas un nepārtikas preču tirdzniecība...","descriptionMarkdown": "**Galvenie darba pienākumi:**\n\n- Pārtikas un nepārtikas preču tirdzniecība","summary": "Galvenie darba pienākumi: Pārtikas un nepārtikas preču tirdzniecība; Pircēju apkalpošana pie kases; Preču pieņemšana, pasūtīšana...","jobArea": "Tirdzniecība / Mārketings","contractType": "Darbinieka amats uz nenoteiktu laiku","workSchedule": "Maiņu darbs","workload": "Viena vesela slodze","vacancyCount": 1,"startDate": null,"isRemote": null,"isPartialRemote": null,"isSeasonal": null,"hasTravelRequired": null,"hasAccommodation": null,"educationLevel": null,"educationField": null,"languageRequirements": [],"computerSkills": [],"escoSkills": [],"driverLicenseCategories": null,"tractorLicenseCategories": null,"certifications": null,"additionalRequirements": null,"salaryPaymentMethod": null,"stateLanguageLevel": null,"status": "AKTUALA","isRepost": false,"originalPublishDate": null,"originalUrl": null,"contentHash": "a3f8c1d2e4b9f7a1","source": "cvvp.nva.gov.lv","scrapedAt": "2026-04-24T17:30:00.000Z"}
Examples
Search by keyword:
{"keyword": "programmētājs","fetchDetails": true}
Remote jobs with salary above 2000 EUR:
{"minSalary": 2000,"remoteOnly": true,"fetchDetails": true}
Full-time jobs in Rīga, new in the last 7 days:
{"keyword": "Rīga","workload": "pilna","daysOld": 7,"fetchDetails": true}
Fetch all active NVA vacancies with full details:
{"fetchDetails": true,"maxResults": 9999}
Daily incremental feed — new listings only:
{"fetchDetails": true,"daysOld": 1,"skipReposts": true}
Direct URL — scrape a specific vacancy:
{"startUrls": [{ "url": "https://cvvp.nva.gov.lv/#/pub/vakances/448829929" }],"fetchDetails": true}
💰 Pricing
$1.49 per 1,000 results — you only pay for successfully retrieved listings. Failed retries and filtered reposts are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.49 |
| 10,000 | ~$14.90 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Use the Max results cap in the input to control your spend exactly.
Performance
| Run type | Approx. time | Memory |
|---|---|---|
| Full feed, fetchDetails: true (~100 listings) | 30–90 seconds | 512 MB |
| Full feed, fetchDetails: false | 5–15 seconds | 512 MB |
| startUrls (1 listing) | 3–8 seconds | 512 MB |
Known limitations
- The NVA public vacancy portal (
cvvp.nva.gov.lv) typically lists 50–200 active vacancies at any time — this is a curated government portal, not a commercial aggregator. - Job descriptions are published in Latvian. No translation is performed.
- Salary data is published at the employer's discretion;
salaryMinandsalaryMaxmay be null for listings without salary information. - Contact person name, phone, and email are excluded from output in compliance with GDPR / AVG personal data policy.
educationLevel,educationField, and language requirements are null for many listings.
Technical details
- Source: cvvp.nva.gov.lv — Latvian State Employment Agency public vacancy portal (NVA CVVP)
- Memory: 512 MB
- Repost storage: KeyValueStore
nva-lv-scraper-job-dedup, 90-day TTL - Retry: Automatic retry on network errors, exponential backoff, 3 attempts per request
Additional services
Need a custom actor, additional filters, scheduled runs, or integration support? Send an email to info@unfencedgroup.nl — we build on request.
Part of the Unfenced Group European job board scraper portfolio — 50+ job markets covered. Built by unfenced-group · Issues? Open a ticket or send a message.